2013-03-13 61 views
1

我有一個引用另一個對象的對象「監視器」:「爸爸」。每當「父親」發生某些變化時,都應通知「看守人」。Ember JS:觀察對象後代的變化

它適用於父親的孩子改變時,但不是當父親的大孩子被改變時。在後一種情況下,我無法讓觀察員觸發。我猜嵌套的@each可能是錯誤的,但我不知道如何做到這一點。

當爸爸或他的後代中的某些內容被修改時,是否可以簡單地向觀察者發送通知通知?

App.Dad = DS.Model.extend({ 
    sons: DS.hasMany('App.Son'), 
    name: null 
}) 

App.Son = DS.Model.extend({ 
    dad: DS.belongsTo('App.Dad'), 
    sons: DS.hasMany('App.GrandSon'), 
    name: null 
}) 

App.GrandSon = DS.Model.extend({ 
    dad: DS.belongsTo('App.Son'), 
    name: null 
}) 

App.Watcher = Ember.Object.extend({ 
    dad: null, // will be set later 
    dadChanged: function(){ 
     // Fires if a son is changed, but not 
     // if a grand son is changed 
    }.observes('[email protected]','[email protected]@each.name') 
}) 

CF A的jsfiddle說明這一點:http://jsfiddle.net/4kUzr/1/

回答

0

你沒有勾勒出詳細的用例,而是從對象建模角度來看,我懷疑這樣工作的:

App.Person = DS.Model.extend({ 
    dad: DS.belongsTo('App.Person'), 
    sons: DS.hasMany('App.Person'), 
    name: null, 
    nameObserver : function(){ 
     var dad = this.get("dad"); 
     // do some logic 
     // hand it afterwards to the dad of this person 
     if(dad) 
     dad.nameObserver() 
    }.observes("name") 
}); 

所以才1班而不是多班,我建立了親子關係

+0

感謝mavilein。我寫的例子只是一個非常簡單的例子,正如你所指出的那樣 - 並不反映我的用例(具體)。後代可能實際上是完全不同的類型。通用的問題是:是否有一種簡單的方法來通知所有的祖先何時後裔發生變化(即「遍歷」關聯)?我不確定你的解決方案是否適用於一般情況... – PJC 2013-03-13 16:22:26