我有一个关于微风实体的变化检测的问题。
假设我有Changed
状态的实体,因为其中一个字符串属性已更改(例如,从'hello'
更改为'hello2'
。
如果我将此属性更改回其初始值'hello'
,我希望hasChanges()
返回Unchanged
。但唉,州仍然是Changed
。
这是预期的行为吗?如果是这样,有没有办法让Breeze使用其originalValues哈希映射来检查真正的变化,而不是"肮脏"?
答案 0 :(得分:0)
有趣的问题。我认为没有办法让breeze根据比较来计算hasChanges,但是你可以把它放在一起。
originalValues哈希映射仅包含breeze认为已为实体更改的属性。因此,您可以编写一个小函数来触发entityChanged事件并进行比较,如果没有差异,则将entityState设置为unmodified。
类似的东西:
em.entityChanged.subscribe(function(changeArgs) {
var action = changeArgs.entityAction;
var entity = changeArgs.entity;
var ovs = entity.entityAspect.originalValues
if (action == breeze.EntityAction.PropertyChange) {
for (var prop in ovs) {
if (prop in entity) {
// As soon as a non-matching property is discovered,
// then 'Modified' is the appropriate state, so exit
if (entity[prop] !== ovs[prop]) return;
}
}
// all the properties are the same. mark it unchanged
entity.entityAspect.setUnchanged();
}
});
这是我的头脑。我目前没有测试环境的环境,所以我不确定我是否相信代码。
希望这有帮助。