Wir schreiben eine Anwendung mit EmberJS. Wir sind jedoch immer noch neu in diesem Rahmen und es fällt uns schwer, etwas von dem zu lösen, was einfach zu sein scheint.Ember JS-Übergang zu verschachtelten Routen, bei denen alle Routen dynamische Segmente aus einer Ansicht sind
Das Modell ist ziemlich einfach, es gibt 3 Modelle: Warteschlange, Aufgabe und Bild. Wir verwenden dynamische URI-Segmente für alle Routen und Routen für diese Modelle sind verschachtelt in der Form: : queue_id /: task_id /: image_id.
Die Routen sind auf diese Weise konfiguriert:
App.Router.map(function() {
this.resource('queue', {path: ':queue_id'}, function() {
this.resource('task', {path: ':task_id'}, function() {
this.resource('image', {path: ':image_id'});
});
});
}
Und irgendwo im HTML, haben wir diese einfache Vorlage durch alle Bilder von einer Aufgabe iterieren:
{{#each task.images}}
<li>
{{#view App.ThumbnailView.contentBinding="this"}}
<img {{bindAttr src="thumbnail.url"}} />
{{/view}}
</li>
{{/each}}
Und hier ist die Code für die Miniaturansicht:
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);
}
});
Endlich ist hier unser 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);
}
});
Das Problem: Der Aufruf von this.get('controller.target.router').transitionTo()
scheint zu funktionieren. Ich kann sehen, dass sich die URL ändert, wenn ich auf eine der Miniaturansichten klicke (z. B. von/1/1/2 in etwas wie/1/1/3). Ich sehe jedoch keine Statusänderung in der Benutzeroberfläche. Auch die Linie, in die ich einen Haltepunkt gesetzt habe, scheint nicht ausgelöst zu sein. Aber wenn ich die Seite aktualisiere, funktioniert es gut.
Ist etwas mit meinem Übergangscode falsch?
Danke.
Hallo Teddy. Vielen Dank. Du hast Recht, das Modell, das vom Modell-Hook zurückgegeben wurde, ist nicht dasselbe wie die Modelle, die ich passiere. Gibt es eine Möglichkeit, das Modell der ImageRoute von der ThumnaiView zu bekommen? – arjaynacion
Sie müssen nicht den tatsächlichen ImageRoute-'Modell'-Hook aufrufen, Sie müssen das gleiche Modell ** weitergeben, als ob ** es vom Modell-Hook zurückgegeben wurde. Sie durchlaufen "task.images", ist das nicht ein Array von "App.Image" -Modell-Instanzen (wie Sie es vom ImageRoute-Model-Hook zurückgeben würden)? –
Ok danke. Jetzt denke ich, ich weiß was zu tun ist. Aber da meine Routen alle nach dynamischen Segmenten sind,/queue_id/task_id/image_id, heißt das, dass ich die Warteschlange und den Task nach ihren IDs erneut anfragen muss und diese Modelle dann in der transitionToRoute-Methode weiterleiten muss? Ich denke darüber nach, ob es einen Weg gibt, diese Modelle zu bekommen, ohne dass sie erneut gefragt werden müssen. Wie zum Beispiel in jeder Route kann ich den Aufruf this.modelFor ('routeName') verwenden, um das Modell dieser Route zu erhalten. Aus meiner Sicht ist das nicht möglich. – arjaynacion