Ember.js 余烬JS:观察对象的变化';后代

Ember.js 余烬JS:观察对象的变化';后代,ember.js,ember-data,Ember.js,Ember Data,我有一个对象“watcher”,它引用另一个对象:“dad”。每次“爸爸”的内容发生变化时,都应该通知“观察者” 当爸爸的孩子被改变时,它起作用,但当爸爸的孙子孙女被改变时就不起作用了。在后一种情况下,我无法让观察者触发。我猜嵌套@each可能是错误的,但我不确定如何做到这一点 当dad或其后代中的某些内容被修改时,有没有一种方法可以简单地向观察者发送一个通用通知 App.Dad = DS.Model.extend({ sons: DS.hasMany('App.Son'), n

我有一个对象“watcher”,它引用另一个对象:“dad”。每次“爸爸”的内容发生变化时,都应该通知“观察者”

当爸爸的孩子被改变时,它起作用,但当爸爸的孙子孙女被改变时就不起作用了。在后一种情况下,我无法让观察者触发。我猜嵌套@each可能是错误的,但我不确定如何做到这一点

当dad或其后代中的某些内容被修改时,有没有一种方法可以简单地向观察者发送一个通用通知

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('dad.sons.@each.name','dad.sons.@each.sons.@each.name')
})

Cf一个jsFiddle说明了这一点:

您没有详细概述您的用例,但从对象建模的角度来看,我怀疑您是这样做的:

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节课而不是多节课,我就建立了亲子关系

谢谢mavilein。我写的例子只是一个非常简单和精简的例子,正如你所指出的,它并不反映我的用例(这是特定的)。后代实际上可能是完全不同的类型。一般的问题是:有没有一种简单的方法可以在后代发生变化时通知所有祖先(即遍历“向上”关联)?我不确定您的解决方案是否适用于一般情况。。。