查看单击操作不返回正确的对象

时间:2013-02-28 02:53:08

标签: ember.js

我在视图中遇到点击处理程序时遇到问题。它没有返回集合的预期成员,而是返回整个集合。

我创建了一个jsfiddle来证明这个问题。我有一个ArrayController,其内容我预先填充。然后,此控制器的视图将控制器的#each帮助程序与另一个视图一起使用:

{{#each controller}}
  {{view App.ActivityListItemView}}
{{/each}}

这是有效的,因为我在页面上看到了项目的名称,并且可以单击它。

问题在于click处理程序 - 如果我是@get('content'),则返回父控制器的内容。如何获取被点击的项目?如果您查看jsfiddle中的控制台输出,您将看到问题。我认为这是一个背景问题?

我已尝试将contentBinding =“this”添加到视图中:

{{#each controller}}
  {{view App.ActivityListItemView contentBinding="this"}}
{{/each}}

但这没什么区别。

感谢,

马丁

2 个答案:

答案 0 :(得分:1)

  

如何获取点击的项目?如果您查看jsfiddle中的控制台输出,您将看到问题。我认为这是一个背景问题?

完全。您希望视图的context代替其控制器的内容。所以:

click: (data)->
  console.log 'clicked on an activity'
  selected = @get('context')
  @get('controller').set('selectedActivity', selected)
  console.log(@get('controller').get('selectedActivity.name'))
  

为什么?

默认情况下,{{#each}} helper does not create a new controller instance for items in the array. So when you @ get('controller')`从视图助手中搜索视图层次直到找到控制器 - 在这种情况下是阵列控制器。

如果您想为每个项目设置单独的控制器,您可以为每个帮助者提供itemController属性 - 请参阅http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_each

答案 1 :(得分:0)

是的,我有这个工作,我认为由于缺乏对contentBinding参数的理解而引发了这个问题。基本上我已经改为在#each块中使用特定名称'activityBinding',然后明确地引用click处理程序中的活动。有关正常工作的演示,请参阅jsfiddle

{{#each controller}}
  {{view App.ActivityListItemView activityBinding="this"}}
{{/each}}

click: ->
  console.log 'clicked on an activity'
  console.log @get('activity.name')
  content = @get('activity')
  @get('controller').set('selectedActivity', content)