2013-07-10 39 views
1

我工作的一個Ember.js應用程序與此類似:Ember.js:傳遞模板的當前上下文對象的動作

http://jsfiddle.net/rzb2m/

現在,這確實差不多就是我想除了一個關鍵問題。底部的setFavorite操作具有硬編碼的0.這意味着如果您更改了Carol最喜歡的操作,它實際上會更改Alice最喜歡的操作。我一直無法弄清楚如何構建應用程序,使其具有正確的行爲。如何將正確的對象傳遞給setFavorite函數(在這種情況下,this.content.people [i])?

注意:我的真實應用程序實際上比這更復雜一點,因爲我在頁面上有兩個單獨的人員列表。所以解決方案不應該只涉及將一個索引傳遞給setFavorite,因爲這不會擴展到具有多個列表的更復雜的情況。這也是人員模板未使用的原因。在真正的應用程序中,有複雜性證明它是正確的。

回答

3

您正在依賴從控制器到視圖的隱式綁定解析。但是這個失敗了,因爲當你將事情分解成部分時,你無法在迭代中查找父對象。

雖然#each controller的作品,你最好用#each person in controller。然後,您可以在局部視圖中訪問view中的屬性,並根據需要向前傳遞它。

更改主#eachindex模板,其中,

{{#each person in people}} 
    <li>{{view App.PersonView contentBinding=person}}</li> 
{{/each}} 

然後在person template

{{view App.PersonDetailsView contentBinding=view.content}} 

而且在personDetails模板。

{{#each fave in view.content.getActivities}} 

這一切給你的人傳遞給setFavorite方法的能力,

<a {{action setFavorite view.content fave}} href="#"> 

所以setFavorite切換到該人一個簡單的任務。

setFavorite: function(person, fave) { 
    person.set('favoriteActivity', fave.name); 
}, 

這是更新的jsfiddle

+0

完美,謝謝! – mightybyte

相關問題