检测Ember.Object是否脏的最佳方法

时间:2012-08-10 12:57:17

标签: ember.js

我有一个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中不再起作用。

1 个答案:

答案 0 :(得分:0)

我相信您可能还需要覆盖setUnknownProperty。用户界面正在使用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

如果您在App.Post课程中预定了该字段,他们似乎会致电您的二传手。