2015-11-06 82 views
1

我有兩個控制器標記和報告。 標籤Controller需要觀察Reports上的數據屬性。 但是,數據屬性是異步的並在服務器上調用後進行更新。 如何獲取報告內的財產?Ember,觀察者在另一個控制器中偵聽屬性

我試圖做類似如下:

ReportsController({ 
    data: null, 
    actions: { 
    onAsyncCall: function(updatedData) { 
     this.set('data', updatedData); 
    } 
    } 
}); 

TagsController({ 
    reportsController: Ember.inject.controller('reports'), 
    doSomethingDataUpdate: Ember.observer('reportsController.data', function() { 
    this.set('tagProperties', this.get('reportsController.data')); 
    } 
}); 

提前感謝!

+2

0123ange切線,但我會做'tagProperties:Ember.computed.alias('reportsController.data')' – andorov

+0

在這種情況下不會'Ember.computed.readOnly'更好嗎? – spectras

+0

爲什麼只讀?他想要在另一個控制器實例上完全相同的事情。別名是一個不錯的選擇。 –

回答

1

所以我想出了一條出路。而不是讓TagsController注入ReportsController。我將其逆轉並將Tagscontroller注入到Reports中。

異步調用後,我更新的也就是現在觀察到的Tagscontroller財產。問題解決了。

ReportsController({ 
    tagsController: Ember.inject.controller('reports.tags'), 
    actions: { 
    onAsyncCall: function(updatedData) { 
     this.set('tagsController.data', updatedData); 
    } 
    } 
}); 

TagsController({ 
    data: null, 
    doSomethingDataUpdate: Ember.observer('data', function() { 
    this.set('tagProperties', this.get('data')); 
    } 
}); 

更新: 所以我找到了一個更好的解決方案。 communicating between components

基本上我需要使用服務,特別是擴展Ember.Events的服務。

這樣,每當我在我的報告,它會觸發一個動作來更新我的標籤異步更新。我認爲我讀了某個地方,觀察者和計算只在this.get()後被解僱。所以它並沒有真正觀察到我正在尋找的變化。感謝大家的幫助。

+1

我不明白「tagProperties」的目的一個額外的觀察員,什麼都不做。順便說一句,如果你有更多這些常見的功能。我建議製作一個「mixin」並用mixin封裝控制器。 –

+0

對不起,您是對的。這只是僞代碼。 「標籤屬性」是我想要設置的其他東西。 – imahungry