Emberjs在collectionView中的动作

时间:2014-04-15 14:48:23

标签: ember.js

我设法使用了这样的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]:否则,是否可以从控制器访问视图变量?从控制器编辑或更新视图变量。

1 个答案:

答案 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的文档,并在它的当前形状进行钙化之前重新检查你的代码。