2013-09-26 24 views
1

我試圖建立一個列表頁是這樣的:Ember.js:如何顯示的記錄和鏈接索引,而不側面加載

{{#each task in controller}} 
    {{#linkTo 'project' task.project}} 
    {{task.project.name}} 
    {{/linkTo}} 
{{/each}} 

的問題是,我不希望有預先加載與每個任務相關的每個項目,因爲我不太可能需要所有這些項目,並且最終導致項目依賴關係樹中的關聯混亂。相反,我試圖做這樣的事情:

{{#each task in controller}} 
    {{#linkTo 'project' task.project_params}} 
    {{task.project_name}} 
    {{/linkTo}} 
{{/each}} 

然後是任務模式:

App.Task = DS.Model.extend 
    project_id: DS.attr('number')             
    project_name: DS.attr('string') 

    project_params: (->                
    { id: @get('project_id') }              
).property('project_id') 

如預期的那樣tasks/index頁面上該解決方案的實際工作。我看到項目名稱,並鏈接到項目。但是在項目頁面上,項目似乎並不認爲它與任何任務相關聯。它命中服務器,服務器響應項目和相關任務。但是,它似乎沒有用新數據刷新項目。我究竟做錯了什麼?

回答

1

看起來你可以這樣做:

{{#each task in controller}} 
    {{#linkTo 'project' task.project_id}} 
    {{task.project_name}} 
    {{/linkTo}} 
{{/each}} 
+0

當然,但如果你想實際定義任務和項目之間的關係,你應該可以使用belongsTo/hasMany和'#link-to'項目',task.project'。 – gerry3

+0

但是,我現在無法弄清楚,現在放棄了。 – gerry3

0

您是否嘗試過使用異步關係?

喜歡的東西:

App.Task = DS.Model.extend 
    project: DS.belongsTo('project', async: true) 
    projectName: DS.attr('string') 

不知道是否有可能得到它只有在JSON項目編號工作,但你應該能夠links例如做{ task: { id: 1, projectName: 'foo', links: { project: 'project/2' }(這項任務可能不是你想要的,但也許你可以使用完整的URL或其他東西)。

模板中的鏈接會像{{#link-to 'projects.show' project}}{{projectName}}{{/link-to}}

這裏是一個live example

+0

嗯,這似乎並沒有這樣的伎倆。它仍會加載任務索引頁面上的所有項目。 – lobati

+0

好點。這沒有任何意義。我不知道發生了什麼。 – gerry3

相關問題