1

我有这个jsbin。我的问题是我试图触发action

<a {{action controllers.nodesIndex.destroyAllRecords this}}><i class="icon-remove-circle"></i><a/>

但我得到一个:

Uncaught Error: Nothing handled the event 'controllers.nodesIndex.destroyAllRecords'

(您可以通过点击icon-remove-circle右上角的小图标来触发它,并在 js 控制台上检查错误)

但我的控制器设置正确:

App.NodesIndexController = Ember.ArrayController.extend({
    destroyAllRecords: function () {
        console.log('destroyAllRecords called');
    },
});

我在这里想念什么?

4

1 回答 1

2

由于nodes/index模板的控制器是App.NodesIndexController,因此您需要将其提及为controllers.nodesIndex.destroyAllRecords,默认目标将是App.NodesIndexController,因此您可以<a {{action destroyAllRecords}}>按照@Thomas 所说的那样说。

同样为了获取记录的长度,只需说{{this.length}}而不是{{controllers.nodesIndex.length}}.

我已经更新了你的jsbin

只有当您指的是模板的控制器之外的其他控制器时,您才需要说'controllers.controllername.methodname',并且您必须在需求列表中提供控制器的名称,例如,如果您想调用“配置文件”的方法' 从你的 'nodes/index' 模板路由,然后

App.NodesIndexController = Ember.ArrayController.extend({
    needs: ['profile'],
});

在您的模板中,

<a {{action controllers.profile.methodname}}>

希望能帮助到你。

更新:参考评论中的解决方案和垃圾箱

于 2013-07-12T11:48:52.153 回答