Ember.js 检测新创建的模型是否更改了属性
假设您有一条/新路由,路由器将创建模型的新实例 模型的属性绑定到页面上的某些输入字段 我希望能够检测新模型在实例化后是否发生了更改Ember.js 检测新创建的模型是否更改了属性,ember.js,ember-data,Ember.js,Ember Data,假设您有一条/新路由,路由器将创建模型的新实例 模型的属性绑定到页面上的某些输入字段 我希望能够检测新模型在实例化后是否发生了更改 model.get('hasDirtyAttributes')不幸地报告新实例为true,因为它尚未保存 我想尝试model.get('hasDirtyAttributes')&&model.get('dirtyType')=='updated'但在第一次保存之前,dirtyType仍然是创建的。您可以在该模型上创建一个计算属性,该属性依赖于任何声明的属性,如果任何
model.get('hasDirtyAttributes')
不幸地报告新实例为true,因为它尚未保存
我想尝试
model.get('hasDirtyAttributes')&&model.get('dirtyType')=='updated'
但在第一次保存之前,dirtyType仍然是创建的
。您可以在该模型上创建一个计算属性,该属性依赖于任何声明的属性,如果任何属性与其初始值不同,则返回true,否则返回false
为了获得更好的性能,您只能在
model.get('isNew')==true
时计算此属性。您可以调用model.changedAttributes()
并查看它是否为空(),但无法观察它。前-
Object.keys(this.get('model').changedAttributes()).length > 0
我不知道在这种情况下你能观察到的一般属性。您必须遵守指定的属性列表
或者您可以覆盖模型上的设置
,并将其设置为一个值-
set: (key, value) ->
@attributeHasChanged = true
@_super(key, value)
是的。由于
changedAttributes()
返回一个对象,因此我最终得到了Ember.keys(this.get('model').changedAttributes())。长度>0
太棒了!如果答案解决了问题,请接受。我会让它稍微长一点,让其他人回答,然后接受。你能编辑你的答案以包含我粘贴的片段吗?另外,由于Ember.keys已被弃用,因此它应该是Object.keys,对此表示抱歉