Comment appeler une action d'une autre action lorsqu'elle est enveloppée dans actions
dans un contrôleur EmberJS?
Code d'origine qui utilise la méthode désormais obsolète pour définir les 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}}>
Cependant, avec EmberJS 1.0.0, nous obtenons un avertissement de dépréciation, disant que les actions doivent être placées dans un objet actions dans le contrôleur, plutôt que directement dans le contrôleur, comme ci-dessus.
Mise à jour du code, selon les recommandations:
//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}}>
Cependant, je trouve qu'il n'est pas possible pour une fonction définie dans les actions d'en appeler une autre, car l'objet this
ne semble plus être le contrôleur.
Comment puis-je m'y prendre?
Vous pouvez utiliser la méthode send(actionName, arguments)
.
App.IndexController = Ember.ArrayController.extend({
actions: {
actionFoo: function() {
alert('foo');
this.send('actionBar');
},
actionBar: function() {
alert('bar');
}
}
});
Voici un jsfiddle avec cet exemple http://jsfiddle.net/marciojunior/pxz4y/