6

Ember.Mixinそのプロパティの 1 つを観察する があります (こちら) bar.baz

この Mixin を拡張bar.bazして.create()パラメーターを設定しましたが、オブザーバーが呼び出されません。

これが私のコードです:

App.FooMixin = Ember.Mixin.create({
    barBazDidChange: function() {
        console.log('barBazDidChange'); // never called
    }.observes("bar.baz")
});

App.Foo = Ember.Object.extend(App.FooMixin);

App.fooObject = App.Foo.create({
    bar: Ember.Object.create({
        baz: "ember"
    })
});​

関連する jsfiddle : http://jsfiddle.net/aMQmn/

もちろん、以下のようなメソッドでオブザーバーを呼び出すこともできinit()ますが、より良い解決策があるかどうか (または、この解決策が適切な方法であるかどうか) を考えています。

App.FooMixin = Ember.Mixin.create({
    init: function() {
      this._super();
      if (this.getPath('bar.baz')) { 
        this.notifyPropertyChange('bar.baz');
      }
    }
});
4

2 に答える 2

3

したがって、7日間は回答がありません...作成時にプロパティを渡す代わりに、次のように作成を連鎖させてプロパティを設定します。

App.fooObject = App.Foo.create().set('bar', Ember.Object.create({baz: "ember"}));​

十分に満足できない場合は、github の ember プロジェクトに問題を投稿できます: https://github.com/emberjs/ember.js/issues

于 2012-07-17T15:43:33.543 に答える
3

正しい解決策は、メソッドをオーバーライドしinit(必ず を呼び出してくださいthis._super())、そこで関数を呼び出すことです。他の人が指摘したように、値が実際には変化していないため、オブザーバーは発火していません。createこれを問題にしないように動作させることについて、いくつかの議論がありsetPropertiesました。

于 2012-07-25T01:14:26.433 に答える