如何从模板触发控制器上的操作

时间:2013-07-12 10:09:26

标签: ember.js

我有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');
    },
});

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

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

另外,要获取记录的长度,只需说出{{this.length}}而不是{{controllers.nodesIndex.length}}

我已更新您的jsbin

只有当您指的是模板的控制器以外的其他控制器时,您才需要说'controllers.controllername.methodname',并且您需要在需求列表中提供控制器的名称, 比如,如果你想从你的'nodes / index'模板调用你'profile'路线的方法, 然后

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

并在您的模板中

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

希望它有所帮助。

更新:请参阅注释

中的解决方案和bin