将实体编辑回其原始值时,Breeze hasChanges()

时间:2016-01-22 16:24:10

标签: breeze

我有一个关于微风实体的变化检测的问题。

假设我有Changed状态的实体,因为其中一个字符串属性已更改(例如,从'hello'更改为'hello2'

如果我将此属性更改回其初始值'hello',我希望hasChanges()返回Unchanged。但唉,州仍然是Changed

这是预期的行为吗?如果是这样,有没有办法让Breeze使用其originalValues哈希映射来检查真正的变化,而不是"肮脏"?

1 个答案:

答案 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();
    } 
});

这是我的头脑。我目前没有测试环境的环境,所以我不确定我是否相信代码。

希望这有帮助。