2012-08-10 34 views
3

我有一个烬对象,我想知道它是否处于肮脏状态。检测Ember.Object是否脏的最佳方法

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,但它似乎并没有使用一套功能使用时,余烬绑定。我添加了日志,并且此方法不是由常规的emberjs绑定工作流程调用的。

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

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

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

+2

你可能想看看烬数据。它为您提供了一个Model对象(从Object扩展而来),它可以处理所有“isDirty”需求。它具有一系列其他很好的功能,可以轻松获取/更新模型对象和创建模型关系。而在更高层次上,你不应该再担心“isDirty”状态。使用ember的一个要点是不再担心数据状态的所有管理,只需将模板绑定到数据(数据更新和模板更新;不需要额外的引导)。 – SciSpear 2012-08-10 14:03:16

+1

因为我根本不使用ember-data,所以我宁愿有一些地方不需要添加ember-data来验证脏乱。我想我会试着深入,比较我的对象。 – gingman 2012-08-10 14:21:01

回答

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类中预定义的领域。

相关问题