是否可以为控制器内的每个操作创建某种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>