1

別のオブジェクト「お父さん」を参照するオブジェクト「ウォッチャー」があります。「お父さん」で何かが変わるたびに「ウォッチャー」に通知する必要があります。

お父さんの子供が変更された場合は機能しますが、お父さんの孫が変更された場合は機能しません。後者の場合、オブザーバーをトリガーさせることはできません。@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/

4

1 に答える 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つのクラスだけで、親子関係が確立されました

于 2013-03-13T15:41:24.343 に答える