2016-09-18 4 views
0

У меня есть маршрут, который имеет крючок afterModel.Ember.js действие пузырится, но контроллер не определен в действии

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') в моем маршруте применения не определен. Зачем?

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

+0

Контроллер не будет установлен до тех пор, пока все ловушки модели не будут устранены. –

+0

Я бы сказал, сохраняя ваши свойства, связанные с состоянием, в контроллере. В вашем случае, если вы измените 'someProp' в маршруте, он не будет отображаться в шаблоне, если он не пройдет через setupController. – kumkanillam

ответ

0

Благодаря @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); 
    } 

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

+0

Я предлагаю вызывать 'this._super (... arguments);' вместо установки модели, он менее подвержен ошибкам. – locks

Смежные вопросы