Ember.js:将模板的当前上下文对象传递给操作

时间:2013-07-10 18:25:57

标签: ember.js

我正在开发一个与此类似的Ember.js应用程序:

http://jsfiddle.net/rzb2m/

现在除了一个关键问题外,这几乎是我想要的。底部的setFavorite操作具有硬编码0.这意味着如果您更改Carol最喜欢的活动,它实际上会更改Alice最喜欢的活动。我无法弄清楚如何构建应用程序以使其具有正确的行为。如何将要更改的正确对象(在本例中为this.content.people [i])传递给setFavorite函数?

注意:我的实际应用程序实际上比这更复杂,因为我在页面上有两个单独的人员列表。所以解决方案不应该只涉及将索引传递给setFavorite,因为这不会扩展到具有多个列表的更复杂的情况。这也是人员模板看起来未使用的原因。在真实的应用程序中,存在复杂性,证明它是合理的。

1 个答案:

答案 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