Ember.js 余烬JS:观察对象的变化';后代
我有一个对象“watcher”,它引用另一个对象:“dad”。每次“爸爸”的内容发生变化时,都应该通知“观察者” 当爸爸的孩子被改变时,它起作用,但当爸爸的孙子孙女被改变时就不起作用了。在后一种情况下,我无法让观察者触发。我猜嵌套@each可能是错误的,但我不确定如何做到这一点 当dad或其后代中的某些内容被修改时,有没有一种方法可以简单地向观察者发送一个通用通知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
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。我写的例子只是一个非常简单和精简的例子,正如你所指出的,它并不反映我的用例(这是特定的)。后代实际上可能是完全不同的类型。一般的问题是:有没有一种简单的方法可以在后代发生变化时通知所有祖先(即遍历“向上”关联)?我不确定您的解决方案是否适用于一般情况。。。