Ember JS:观察对象后代的变化

时间:2013-03-13 14:46:05

标签: ember.js ember-data

我有一个对象"观察者"引用另一个对象:"爸爸"。 "观察"每当'" dad"。

发生变化时,都应该通知我

当爸爸的孩子被改变时,它会起作用,但是当爸爸的大孩子被改变时,它就不会起作用。在后一种情况下,我无法让观察者触发。我想嵌套@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('dad.sons.@each.name','dad.sons.@each.sons.@each.name')
})

这是一个jsFiddle,说明了这一点:http://jsfiddle.net/4kUzr/1/

1 个答案:

答案 0 :(得分: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个班级而不是多个班级,我建立了亲子关系