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/