Действие Ember.js всплывает, но контроллер не определен в действии

У меня есть маршрут с хуком afterModel.

afterModel: function(model, transition){
  transition.send('doInAppRoute');
}

У меня есть действие в моем маршруте приложения:

doInAppRoute: function(){
  var controller = this.get('controller');
  controller.set('someProp', true);
}

Когда я позволяю действию всплывать из маршрута с помощью хука afterModel, я получаю следующую ошибку.

Error while processing route: embed Cannot read property 'set' of undefined TypeError: Cannot read property 'set' of undefined

Если я помещу вызов действия doInAppRoute в шаблон приложения, все будет работать, как и ожидалось.

Если вызов действия для doInAppRoute пузырьков, this.get('controller') в моем маршруте приложения не определен. Почему?

И как это можно изменить, чтобы всплывающее действие обновляло свойство контроллера приложения?


person user2517182    schedule 18.09.2016    source источник
comment
Контроллер не будет настроен до тех пор, пока ПОСЛЕ того, как все хуки модели не будут разрешены.   -  person    schedule 18.09.2016
comment
Я бы сказал, сохраните свойства, связанные с состоянием, в контроллере. В вашем случае, если вы измените someProp в маршруте, он не будет отражаться в шаблоне, если он не пройдет через setupController.   -  person Ember Freak    schedule 19.09.2016


Ответы (1)


Спасибо @torazaburo за то, что направил меня в правильном направлении.

Это то, что я сделал.

Установите someProp в начальное значение в маршруте приложения.

someProp: false,

Затем в действии маршрута приложения сделайте что-то вроде:

doInAppRoute: function(){
  this.set('someProp', true);
}

А затем в маршруте приложения setupController выполните:

  setupController: function(controller, model){
    controller.set('someProp', this.get('someProp'));
    controller.set('model', model);
  }

Тогда все должно работать.

person user2517182    schedule 18.09.2016
comment
Я предлагаю вызывать this._super(...arguments); вместо того, чтобы устанавливать модель, она менее подвержена ошибкам. - person locks; 19.09.2016