2015-11-13 58 views
1

假设您有新路线,路由器会创建模型的新实例。检测新创建的模型是否已更改属性

您的模型的属性绑定到页面上的一些输入字段。

我希望能够检测如果新的模式已经改变,因为它的实例。

model.get('hasDirtyAttributes')不幸报告了新情况属实,因为它尚未保存。

我想试试model.get('hasDirtyAttributes') && model.get('dirtyType') === 'updated',但dirtyType仍然是created,直到你做第一次保存。

回答

3

您可以拨打model.changedAttributes(),看看它是否是空的(docs),但你不能看到它。 Ex -

Object.keys(this.get('model').changedAttributes()).length > 0 

我不知道在这种情况下可以观察到的一般属性。你将不得不遵守一个指定的属性列表。

你可以重写你的模型set和有它设置的值 -

set: (key, value) -> 
    @attributeHasChanged = true 
    @_super(key, value) 
+1

没错。因为'changedAttributes()'返回一个对象,所以我最后使用了'Ember.keys(this.get('model')。changedAttributes())。length> 0' – darethas

+0

太棒了!如果它解决了问题,请接受答案 – andorov

+0

我会稍微延长一段时间让其他人回答,然后接受。你能编辑你的答案,以包括我粘贴的片段吗? 此外,由于Ember.keys已被弃用,它应该是Object.keys,对此抱歉 – darethas

0

您可以创建对模型这将依赖于任何声明属性计算的属性,如果任何属性的不同,从它的初始值,otherways假将返回true。

为了获得更好的性能,你可以只计算该财产,如果model.get('isNew') === true

相关问题