Piszemy aplikację za pomocą EmberJS. Jednak wciąż jesteśmy nowi z tymi ramami i ciężko jest rozwiązać niektóre z tego, co może wydawać się proste.Przejście Ember JS do tras zagnieżdżonych, w których wszystkie trasy są segmentami dynamicznymi z widoku
Model jest dość prosty, istnieją 3 modele: kolejka, zadanie i obraz. Używamy dynamicznych segmentów URI dla wszystkich tras i tras, ponieważ modele te są zagnieżdżone w formie: : queue_id /: task_id /: image_id.
Trasy są skonfigurowane w ten sposób:
App.Router.map(function() {
this.resource('queue', {path: ':queue_id'}, function() {
this.resource('task', {path: ':task_id'}, function() {
this.resource('image', {path: ':image_id'});
});
});
}
i gdzieś w kodzie HTML, mamy ten prosty szablon iterację wszystkich obrazów z zadania:
{{#each task.images}}
<li>
{{#view App.ThumbnailView.contentBinding="this"}}
<img {{bindAttr src="thumbnail.url"}} />
{{/view}}
</li>
{{/each}}
A oto kod do widoku miniatur:
App.ThumbnailView = Ember.View.extend({
tagName : 'a',
click : function(e) {
var task = //assume this value exists;
var queue = //assume this value exists;
var image = //assume this value exists;
this.get('controller.target.router').transitionTo('image', queue, task, image);
}
});
Wreszcie, oto nasze ImageRoute:
App.Image = Ember.Object.extend();
App.Image.reopenClass({
find : function(image_id) {
//This is where I set a breakpoint
console.log(image_id);
}
});
App.ImageRoute = Ember.Route.extend({
model : function(params) {
//image_id is the last uri segment in: #/1/1/1
return App.Image.find(params.image_id);
}
});
Problem: Wezwanie do this.get('controller.target.router').transitionTo()
wydaje się działać. Widzę, że po kliknięciu w jeden z widoków miniatur zmienia się adres URL (np. Z/1/1/2 na coś takiego jak/1/1/3). Jednak nie widzę żadnej zmiany stanu w interfejsie użytkownika. Również linia, w której umieściłem punkt przerwania, nie wydaje się być uruchamiana. Ale kiedy odświeżam stronę, działa dobrze.
Czy jest coś nie tak z moim kodem przejściowym?
Dzięki.
Cześć Teddy. Dzięki. Masz rację, model zwrócony z haka modelu nie jest taki sam jak modele, które przejeżdżam. Czy istnieje sposób, w jaki mogę uzyskać model ImageRoute z ThumbnaiView? – arjaynacion
Nie musisz wywoływać rzeczywistego haka ImageRoute 'model', musisz przekazać ten sam model ** jak ** został zwrócony z haka modelu. Zapętlasz 'task.images', czy nie jest to tablica instancji modelu' App.Image' (to samo, co byś powrócił z hooku ImageRoute)? –
Ok dzięki. Teraz myślę, że wiem, co robić. Ale skoro wszystkie moje trasy są segmentami dynamicznymi,/queue_id/id_adresu/image_id, czy to oznacza, że muszę nakazać kolejkę i zadanie przez ich identyfikatory, a następnie przekazać te modele w metodzie transitionToRoute? Zastanawiam się, czy istnieje sposób na uzyskanie tych modeli bez konieczności zgłaszania. Np. Na dowolnej trasie mogę użyć wywołania this.modelFor ("routeName"), aby uzyskać model tej trasy. W widoku nie sądzę, że jest to możliwe. – arjaynacion