web-dev-qa-db-fra.com

Actions EmberJS - appeler une action d'une autre lorsqu'elle est enveloppée dans des `actions`

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?

46
bguiz

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/

100
Marcio Junior