是否可以为控制器内的每个动作创建某种before()函数?
我知道我可以为每个动作执行一个init(),但是如果我有一些代码我想为每个动作运行怎么办?为每个动作创建相同的init()函数将是多余的。
答案 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>