我有一个关于微风实体的变化检测的问题。
假设我有一个处于Changed
状态的实体,因为它的一个字符串属性已经更改(例如,从'hello'
到'hello2'
)。
如果我将该属性更改为初始值'hello'
,则期望hasChanges()
返回到Unchanged
。但遗憾的是,这个国家仍然是Changed
。
这是预期的行为吗?如果是这样的话,有没有办法让Breeze使用它的originalValues散列图来检查真正的变化而不是“肮脏”呢?
发布于 2016-01-22 11:00:06
有趣的问题。我不认为有一种方法可以根据比较来计算hasChanges,但是您可能可以把一些东西组合在一起。
originalValues哈希映射只包含微风认为实体已更改的属性。因此,您可以编写一个小函数来激发entityChanged事件并进行比较,如果没有差异,则将entityState设置为未修改的。
类似于:
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();
}
});
这是我头上的东西。目前我没有一个环境来测试它,所以我不确定我是否会相信代码的原样。
希望这能有所帮助。
https://stackoverflow.com/questions/34951351
复制