我正在开发一个与此类似的Ember.js应用程序:
现在除了一个关键问题外,这几乎是我想要的。底部的setFavorite
操作具有硬编码0.这意味着如果您更改Carol最喜欢的活动,它实际上会更改Alice最喜欢的活动。我无法弄清楚如何构建应用程序以使其具有正确的行为。如何将要更改的正确对象(在本例中为this.content.people [i])传递给setFavorite函数?
注意:我的实际应用程序实际上比这更复杂,因为我在页面上有两个单独的人员列表。所以解决方案不应该只涉及将索引传递给setFavorite,因为这不会扩展到具有多个列表的更复杂的情况。这也是人员模板看起来未使用的原因。在真实的应用程序中,存在复杂性,证明它是合理的。
答案 0 :(得分:3)
您依赖于从控制器到视图的隐式绑定解析。但这会破坏,因为当你将事物分成局部时,你无法在#each
迭代中查找父对象。
虽然#each controller
有效但您最好使用#each person in controller
。然后,您可以从局部视图中的view
访问属性,并根据需要将其向前传递。
将#each
模板中的主index
更改为
{{#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。