Подтвердить что ты не робот

Действия 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 больше не является контроллером.

Как я могу это сделать?

4b9b3361

Ответ 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/