6

我有一个Ember.Mixin观察它的一个属性(这里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 回答