2016-10-28 29 views
0

我在Ember控制器中有一個屬性,它有一個觀察者。當我第一次訪問頁面/路由時,以及當我更改該值綁定的下拉列表時(正如所期望的),這將被調用。Ember觀察員/每次路線加載時的運行時間表

什麼也沒有發生,是當我重新訪問頁面並重新設置值(與我離開頁面時的值相同)時,觀察者被解僱。

我需要這個的原因是該值被用作另一個函數的過濾器,並且該函數在觀察者內被調用。

即使值與之前相同,是否有辦法讓觀察者觸發? 或者,每當控制器加載/路由被訪問時,從控制器觸發一個函數(可能通過運行循環)的一種明智的方法?

+0

該控制器是一個單身人士。您可以調用resetController或setupController來(重新)設置屬性。 – mausinc

回答

0

在setupController路由鉤子中,您將獲得controller引用,因此您可以使用它來調用observer函數。

setupController(controller,model){ 
    this._super(...arguments);  
    controller.get('testObserver')(); 
} 
0

我更喜歡下面的風格來觀察一個屬性。

setupController(controller, model){ 
    if (this.get('somelogic')) { 
     controller.addObserver('yourProperty', controller, this.get('callback')); 
    } 
} 

resetController(controller, isExisting, transition) { 
    if (isExisting) { 
     controller.removeObserver('yourProperty', controller, this.get('callback')); 
    } 
}