2013-08-17 82 views
0

我有這些路線定義:EmberJS如何爲路線選擇模板?

this.resource('projects', function() { 
    this.resource('project', { path: ':project_id'}, function() { 
     this.route('details'); 
     this.route('members'); 
    });  
}); 

我的想法是,按照慣例project.details路線將尋找「項目/詳細信息」模板。但奇怪的是,它沒有得到正確的模型。見http://jsbin.com/ELaxigE/19/edit

現在,如果我創建「項目」模板,而不是提供「項目/細節」模板,那麼它的工作原理。見http://jsbin.com/ELaxigE/21/edit

我很困惑發生了什麼事。有人可以解釋嗎?

+0

我已經回答了你的問題,對不起我的英語。如果您有任何疑問,請告訴我。 –

回答

0

給定一條路線。當模型鉤ins't定義,並具有與_id結尾的動態段:

this.route('edit', { path: ':user_id' }); 

這會產生這樣的路線:

App.EditRoute = Ember.Route.extend({ 
    model: function(params) { 
    return App.User.find(params.id); 
    } 
}); 

在你的情況下,唯一的動態分段路線project,因爲:project_id

this.resource('project', { path: ':project_id'}, function() { ... }); 

是因爲detailsmembers,都只是正常的路線,它沒有一個model

當您更改模板project/detailsproject,東西合作,因爲:

你過渡到project.details,首先是轉移到project路線,因爲你已經宣佈this.resource('project'...)。並且因爲它是一個動態分段路線,所以返回App.Project實例,並將您的模板綁定到此model

之後,子路線project.details已過渡,但此時,模板project.details不存在。所以沒有呈現。

我認爲解決方案是@alexspeller答案,或者:

this.resource('project', function() { 
    this.route('details', { path: 'details/:project_id' }); 
    this.route('members', { path: 'members/:project_id' }); 
}); 

我希望它能幫助。

1

這與模板無關。您尚未爲ProjectDetails路線定義模型。你可以這樣做:

App.ProjectDetailsRoute = Em.Route.extend({ 
    model: function() { 
    return this.modelFor('project'); 
    } 
}); 
+0

好吧,所以我需要手動執行此操作。我認爲transitionTo中的第二個參數將用作模型?那麼第二個參數是什麼 - 只生成散列段? – Cracker