有没有办法知道为什么记录在ember数据中处于脏状态,我的意思是什么是已经改变的属性和关系。
调用findAll后我得到isDirty = true,我想调试为什么会这样。
非常感谢
答案 0 :(得分:6)
从Ember-Data beta 6或更早版本开始,有一个changedAttributes()
函数返回已更改的属性的哈希值及其初始值/当前值。见http://emberjs.com/guides/models/working-with-records/
例如:
person.changedAttributes(); //=> { isAdmin: [false, true] }
请注意,changedAttributes()
不是您可以观察到的属性;但是,如果您需要这样做,您可以观察模型上可能发生变化的所有属性,然后在计算属性/观察函数中检查changedAttributes()
。
对于(人为的)例子:
checkAttributes: (->
changed = @get('model').changedAttributes()
if changed['name'] && Object.keys(changed).length == 1
# Do something if name is the only changed attribute
).property('name', 'alias', 'description')
答案 1 :(得分:4)
根据您使用的ember数据版本(现在,您正在使用的适配器),这可能会有所不同。行为changed in version 9。在此之前,您可以说record.isDirtyBecause('belongsTo')
,如果记录已被标记为脏,因为belongsTo
关系已更改,则会返回true
。现在,由于商店和适配器之间的职责发生了一些变化,由适配器来处理这个问题。
如果您的适配器中仍然需要此信息,则您有责任在
dirtyRecordsForAttributeChange
挂钩described above中执行任何簿记。