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

Ember.js, запускать действие программно

У меня есть это представление

  App.ApplicationView = Em.View.extend({
    templateName: 'application',

    actions: {
      myAction: function() {
        //
      }
    }
  });

Предположим, что я хочу вручную запустить это действие из другого метода представления, например didInsertElement, например:

  App.ApplicationView = Em.View.extend({
    templateName: 'application',

    actions: {

      sidebarShowHome: function() {
        this.set('sidebarIsHome', true);
        this.set('sidebarIsNotifications', false);
        this.set('sidebarIsArchive', false);
      },
    },

    didInsertElement: function() {
      this.actions.sidebarShowHome();
    }
  });

Как я мог это сделать? this.actions undefined из метода просмотра.

4b9b3361

Ответ 1

Вы можете использовать mixa TargetActionSupport вместе с this.triggerAction:

App.ApplicationView = Ember.View.extend(Ember.TargetActionSupport, {
  templateName: 'application',
  actions: {
    myAction: function() {
      console.log('myAction');
    }
  },
  didInsertElement: function() {
    this.triggerAction({
      action:'myAction',
      target: this
    });
  }
});

По умолчанию с помощью this.triggerAction() без параметров будет отправлено действие контроллеру, однако если вам нужно настроить таргетинг на другой пункт назначения, укажите параметр target, как показано в примере.

Работаем демо.

Надеюсь, что это поможет.

Ответ 2

Метод triggerAction() существует только в том случае, если в представлении используется микс Ember.TargetActionSupport. Если это не так, используйте this.get('controller').send('action');.

Ответ 3

Чтобы вызвать действие в том же контроллере, вы можете использовать send.

this.send('nameOfAction', someParams);

Чтобы вызвать действие в родительском контроллере из компонента, используйте sendAction.

this.sendAction('nameOfAction', someParams);