3

我有一个 ember 对象,我想知道它是否处于脏状态。

var App.Post = Ember.Object.create({
   title: "Test",
   isDirty: false
});
App.Post.set("title", "Test2");
App.Post.get("isDirty") // Should === true

目前,我尝试重载对象的集合

App.Post = Ember.Object.create({
   set: function(path, value) {
       this._super(path, value);
       this._super("isDirty", true);
   }
})

它在我直接调用 myObject.set 时有效,但在使用 embers 绑定时似乎没有使用该 set 函数。我添加了日志,并且常规的 emberjs 绑定工作流不会调用此方法。

我尝试过的另一件事是添加一个观察者来切换脏标志。

App.Post = Ember.Object.create({
   hasBeenModified: function() {
      this.set("isDirty", true);
   }.observes("title")
})

由于仍然未知的原因,当我在模型级别使用观察时,我的绑定在 UI 中不再起作用。

4

1 回答 1

0

我相信您可能还需要覆盖 setUnknownProperty。UI 正在使用Ember.set(object, key, value). 如果你看一下实现

https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/property_set.js#L60 它不会调用你的setter,但setUnknownProperty如果存在就会调用。

实际上,在

https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/property_set.js#L52

如果您在班级中预定义了该字段,他们似乎会调用您的 setter App.Post

于 2013-12-31T17:38:22.160 回答