Ember.JS每个控制器动作的BEFORE()函数

时间:2014-11-11 11:27:43

标签: ember.js

是否可以为控制器内的每个动作创建某种before()函数?

我知道我可以为每个动作执行一个init(),但是如果我有一些代码我想为每个动作运行怎么办?为每个动作创建相同的init()函数将是多余的。

2 个答案:

答案 0 :(得分:0)

不,没有办法在每个操作之前运行代码而不自己明确地调用它。曾经有一个想法是使用get()查找操作,这可能允许这样做,但它从未实现过。不确定您的用例是什么,但如果您确实需要在每次操作调用之前调用功能,请自行调用。它比我们想出的任何聪明的黑客都更具可读性。

答案 1 :(得分:0)

您可能会这样做:

首先确保您的控制器扩展了“Ember.TargetActionSupport”mixin。

Ember.Controller.extend(Ember.TargetActionSupport,{
    ...
 });

这将允许您以编程方式触发操作。详情请参阅:Ember.TargetActionSupport

然后,您将创建一个包含公共代码的入口点操作以及触发正确操作的调用:

Ember.Controller.extend(Ember.TargetActionSupport,{
    actions: {
        common: function (actionName) {
            //Do common logic here
            this.set('foo', 'bar');

            //And then trigger the intended action
            this.triggerAction({
                action: actionName,
                target: this
            });
        },
        otherAction: function () {
            //Do some more logic here
            this.set('bar', 'baz');
        }
    }
});

您可以在模板中调用此操作,如下所示:

<button {{action 'common' 'otherAction'}}>Press Me</button>