我們正在使用EmberJS編寫應用程序。然而,我們仍然對這個框架有所瞭解,並且我們很難解決一些看似簡單的問題。將Ember JS轉換爲嵌套路由,其中所有路由均爲視圖中的動態段
該模型非常簡單,有3個模型:隊列,任務和圖像。我們爲所有路由和路由使用動態URI段,這些模型嵌套在表單中::queue_id /:task_id /:image_id。
的路由配置是這樣的:
App.Router.map(function() {
this.resource('queue', {path: ':queue_id'}, function() {
this.resource('task', {path: ':task_id'}, function() {
this.resource('image', {path: ':image_id'});
});
});
}
而在HTML的地方,我們有這個簡單的模板,通過從任務的所有圖像進行迭代:
{{#each task.images}}
<li>
{{#view App.ThumbnailView.contentBinding="this"}}
<img {{bindAttr src="thumbnail.url"}} />
{{/view}}
</li>
{{/each}}
這裏是縮略圖視圖代碼:
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);
}
});
最後,這裏是我們的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);
}
});
問題: 到this.get('controller.target.router').transitionTo()
調用似乎是工作。我可以看到,當我點擊其中一個縮略圖視圖時,URL會發生變化(例如從/ 1/1/2變爲/ 1/1/3)。但是,我沒有看到UI中的任何狀態更改。另外,我放置斷點的那一行似乎沒有被觸發。但是當我刷新頁面時,它運行良好。
我的轉換代碼有問題嗎?
謝謝。
嗨泰迪。謝謝。你是對的,從模型鉤子返回的模型與我傳遞的模型不一樣。有沒有一種方法可以從ThumbnaiView獲取ImageRoute的模型? – arjaynacion 2013-05-11 13:16:08
您不需要調用實際的ImageRoute'模型'鉤子,您需要傳遞相同的模型**,就好像它從模型鉤子返回一樣。你正在循環「task.images」,這不是一個「App.Image」模型實例的數組(與從ImageRoute模型鉤子返回的相同)? – 2013-05-11 13:54:55
好的謝謝。現在我想我知道該怎麼做。但是因爲我的路由都是動態段的/ queue_id/task_id/image_id,這是否意味着我需要通過它們的ids查詢隊列和任務,然後在transitionToRoute方法中傳遞這些模型?我在想如果有一種方法可以讓這些模型無需重新查詢。比如在任何路線中,我都可以使用this.modelFor('routeName')來獲取該路線的模型。我認爲這是不可能的。 – arjaynacion 2013-05-11 16:33:57