1

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

http://jsfiddle.net/rzb2m/

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

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

4

1 回答 1

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

于 2013-07-11T04:07:00.773 回答