2016-11-24 10 views
1

Я обезьяна исправлена ​​мой маршрутизатор, чтобы сохранить текущие компоненты маршрута в переменном сеансе:Ember 2,5 наблюдать сессии свойства изменения

var Router = Ember.Router.extend({ 
    customSession: Ember.inject.service('session-custom'), 
    location: config.locationType, 

    didTransition: function() { 
     this._super(...arguments); 

     this.get('customSession').set('currentEntity', this.get('currentRouteName').split('.')[0]); 
     this.get('customSession').set('currentDetailView', this.get('currentRouteName').split('.')[1]); 

    } 
}); 

Я знаю, что это не чистейшее решений, но написание сессии на консоль доказывает, что по крайней мере эти параметры установлены.

В мой контроллер, я хотел бы, чтобы прослушать изменения этих параметров, но как-то это не работает:

import Ember from 'ember'; 
import ApplicationController from './application'; 

export default ApplicationController.extend({ 

    customSession: Ember.inject.service('session-custom'), 

    currentRouteNameChanged: Ember.observer('customSession.currentEntity', function() { 
     console.log("route changed"); 
    }) 
}); 

т.е. «маршрут изменен» никогда не печатается на консоль.

Это кажется довольно простым решением, но я не смог найти решение на SO.

Спасибо!

ответ

0

Возможно, воспользуйтесь initializer, чтобы ввести вашу службу session-custom в контроллеры вашего приложения. Чтобы попасть туда, некоторые предложения ...

Во-первых, в маршрутизаторе, и в других местах, используйте обычную, camelized стенография, чтобы придать вашим услугам, например:

sessionCustom: Ember.inject.service(), 

... и обязательно ссылка sessionCustom в вашем коде, а не customSession.

Далее создайте session-custom инициализатору и внедрить услугу в контроллерах вашего приложения:

export function initialize(application) { 
    application.inject('controller', 'sessionCustom', 'service:session-custom'); 
} 

export default { 
    name: 'session-custom', 
    initialize, 
}; 

Соблюдая изменения маршрута от контроллера теперь должен быть успешным:

export default Ember.Controller.extend({ 
    currentRouteNameChanged: Ember.observer(
    'sessionCustom.currentEntity', function() { 
     console.log("CONTROLLER: ", this.get('sessionCustom.currentEntity')); 
    } 
), 
}); 

Эти изменения, конечно, , также можно наблюдать из самой службы:

export default Ember.Service.extend({ 
    currentEntity: '', // <-- it's helpful to explicitly declare 

    currentRouteNameChanged: Ember.observer(
    'currentEntity', function() { 
     console.log("SERVICE: ", this.get('currentEntity')); 
    } 
), 
}); 

Я продемонстрировал это решение Ember Twiddle.