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

Как я могу вызвать действие контроллера с маршрута Ember при выполнении перехода?

Моя цель - показать на моей странице графический рисунок "loading...", в то время как Ember выбирает данные модели по маршруту Ember.

Это привело меня к http://emberjs.com/guides/routing/loading-and-error-substates/. Это побудило меня создать действие на моем контролере страницы, в котором будет отображаться окно загрузки "Загрузка" в DOM. Например, здесь мой контроллер:

Контроллеры /users.js:

export default Ember.ArrayController.extend({
    ...
    actions: {
        displayLoading: function() {
            // Show the DOM element that says "Loading..."
        },
        ...
    }
});

Я хотел бы назвать это, пока мои данные загружаются, поэтому я определяю маршрут следующим образом:

маршруты /users.js:

export default Ember.Route.extend({
    model: function( params ) {
        return this.store.find('user', params );
    },

    actions: {
        loading: function(transition, originRoute) {
            transition.send('displayLoading');
        }
    }
});

Но когда я это сделаю, я получаю эту ошибку:

Uncaught Error: Nothing handled the action 'displayLoading'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.

Итак, мой вопрос: , где я могу определить это действие, чтобы мой метод loading мог его называть?

Обратите внимание, что попытка this.send('displayLoading') дала мне эту ошибку:

Can't trigger action 'displayLoading' because your app hasn't finished transitioning into its first route. To trigger an action on destination routes during a transition, you can call .send() on the Transition object passed to the model/beforeModel/afterModel hooks..

Обновление: Я могу поймать это действие на самом маршруте, но затем я все еще не могу вызвать действие на своем контроллере.

Обновление # 2: Благодаря ответу @kingpin2k, я решил это. Для заинтересованных, вот полное решение:

Контроллеры /users.js:

export default Ember.ArrayController.extend( {
    actions: {
        showLoading: function() {
            this.set('isLoading', true);
        },

        hideLoading: function() {
            this.set('isLoading', false);
        },
    }
});

маршрутизаторы /users.js:

export default Ember.Route.extend({

    model: function( params ) {
        return this.store.find('user', params );
    },

    actions: {
        loading: function() {
            this.controllerFor('users').send('showLoading');
        },
        didTransition: function() {
            this.controllerFor('users').send('hideLoading');
        }
    }

});

Ключевое понимание заключалось в том, что я могу установить свойство isLoading на моем контроллере, которое определяет, показывает ли мое модальное окно "Загрузка..." в шаблоне Handlebars.

4b9b3361