2013-02-28 32 views
0

我在查看中的点击处理程序时遇到问题。它不会返回该收藏的预期成员,而是整个收藏。查看单击操作没有返回正确的对象

我创建了一个jsfiddle来演示此问题。我有一个ArrayController,其内容我预先填充。此控制器的视图,则使用#each助手与另一视图控制器:

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

这工作,因为我看到页面上的项目名称,可以点击它。

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

我试着加入contentBinding = “本” 的观点:

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

,但没什么区别。

感谢,

马丁

回答

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(“控制器”)`从视图助手,直到控制器被发现它向上搜索的层次结构视图 - 在这种情况下即阵列控制器。

如果你想为每个项目单独的控制器,你可以提供一个itemController属性为每个帮助 - 见http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_each

+0

感谢您的解释迈克尔 - 我将签出'itemController'属性。 – 2013-02-28 21:29:14

0

权,我有这个工作,我认为这个问题对于窜出一个缺乏contentBinding参数的理解。基本上我已经更改为在#each块中使用特定名称的'activityBinding',然后明确引用单击处理程序中的活动。查看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)