我设法使用了这样的collectionView:
App.GroupList = Ember.ArrayController.create({
content: this.getGroupList(),
update: function() {
this.setProperties({content: getGroupList()});
}
})
App.GroupListView = Ember.CollectionView.extend({
tagName: 'tbody',
contentBinding: "App.GroupList"
})
<table class="table-history">
{{#collection App.GroupListView}}
<td class="col-left">
{{view.content.groupName}}
<span class="col-number-contact">{{view.content.participantCount}}</td>
</td>
<td>
<div class="ph-img"></div>
</td>
<td>
<a {{action "editGroup" view.content}}>
<div class="ed-img"></div>
</a>
</td>
{{/collection}}
</table>
正如您所看到的,我已经放置了一个动作助手{{action "editGroup" view.content"}}
,这样可以很好地处理控制器中的动作。但是我需要在视图中处理这个动作。
当我按照这个{{action "editGroup" view.content target=view}}
这样的帮助时,它不起作用。我没有错误,但我也无法在我看来抓住这个事件。
我的模板名为home,我的视图名为App.HomeView = Ember.View.extend({})
。
我真的不明白......
我创造了一个小提示,告诉你它不起作用:http://jsfiddle.net/NQKvy/902/
如果删除动作助手中的target=view
,它将触发控制器处理程序,但视图中没有任何事情发生..
[edit]:否则,是否可以从控制器访问视图变量?从控制器编辑或更新视图变量。
答案 0 :(得分:1)
在您的情况下,target="view"
将定位为每个GroupListView
项目创建的匿名视图。你可能想要这样的东西:
App.GroupListView = Ember.CollectionView.extend({
tagName: 'tbody',
contentBinding: "App.GroupList",
actions: {
editGroup: function() {
alert("You Clicked - in GroupListView");
}
}
})
<a href="#" {{action "editGroup" view.content target="view.parentView"}}>
LINK
</a>
然后,您可以在GroupListView
中处理点击次数。如果确实需要它在IndexView
,您可以添加另一层间接:target="view.parentView.parentView"
。但是,代码变得非常脆弱,所以我不推荐它。
此时,我应警告您,使用视图和控制器的方式不符合Ember的指导原则(控制器命名,手动控制器创建,然后绑定到硬编码实例,......)。在深入挖掘自己之前,我建议你再次阅读Ember的文档,并在它的当前形状进行钙化之前重新检查你的代码。