EmberJS操作 – 在包装在“actions”中时调用另一个操作

当在EmberJS控制器的actions中进行包装时,如何从另一个动作调用一个动作?

使用现在不推荐的方式来定义操作的原始代码:

 //app.js App.IndexController = Ember.ArrayController.extend({ // properties /* ... */ // actions actionFoo: function() { /* ... */ this.actionBar(); }, actionBar: function() { /* ... */ } }); //app.html <div class="foo" {{action actionFoo this}}> <div class="bar" {{action actionBar this}}> 

但是,使用EmberJS 1.0.0时,我们得到了一个弃用警告,指出动作必须放在控制器内的动作对象内,而不是像上面那样直接放在控制器内。

根据build议更新代码:

 //app.js App.IndexController = Ember.ArrayController.extend({ // properties /* ... */ // actions actions: { actionFoo: function() { /* ... */ this.actionBar(); //this.actionBar is undefined // this.actions.actionBar(); //this.actions is undefined }, actionBar: function() { /* ... */ } } }); //app.html <div class="foo" {{action actionFoo this}}> <div class="bar" {{action actionBar this}}> 

但是,我发现动作中定义的一个函数不能调用另一个函数,因为this对象似乎不再是控制器。

我怎么能这样做?

你可以使用send(actionName, arguments)方法。

 App.IndexController = Ember.ArrayController.extend({ actions: { actionFoo: function() { alert('foo'); this.send('actionBar'); }, actionBar: function() { alert('bar'); } } }); 

这是一个jsfiddle这个样本http://jsfiddle.net/marciojunior/pxz4y/

Interesting Posts