Ember.JS用于每个控制器操作的BEFORE()函数



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

我知道我可以为每一个操作执行init(),但如果我有一些代码想为每一件事运行呢?为每个操作创建相同的init()函数将过于多余。

不,如果不明确地自己调用代码,就无法在每次操作之前运行代码。曾经有一个想法是使用get()查找操作,这本来是允许的,但它从未实现。不确定您的用例是什么,但如果您确实需要在每次操作调用之前调用功能,只需自己调用即可。它将比我们能想出的任何聪明的窍门都可读性强得多。

你可以做这样的事情:

首先确保您的控制器扩展了"Ember.TargetActionSupport"混合。

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>

最新更新