Действия EmberJS - вызывать одно действие из другого, когда оно завернуто в `actions`
Как вы вызываете одно действие из другого действия, когда оно завершено внутри actions
в контроллере EmberJS?
Оригинальный код, который использует устаревший способ определения действий:
//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, мы получаем предупреждение о том, что действия должны быть помещены в объект действия внутри контроллера, а не непосредственно внутри контроллера, как указано выше.
Обновление кода в соответствии с рекомендациями:
//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
больше не является контроллером.
Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать метод 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/