将图元编辑回其原始值时,Breeze hasChanges()

将图元编辑回其原始值时,Breeze hasChanges(),breeze,Breeze,我有一个关于breeze实体的更改检测的问题 假设我有一个实体处于已更改的状态,因为它的一个字符串属性已更改(例如从'hello'更改为'hello2') 如果我将此属性更改回其初始值'hello',我希望hasChanges()返回到Unchanged。但遗憾的是,这种状态仍然保持着变化 这是预期的行为吗?如果是这样的话,有没有办法让Breeze使用其原始值散列图来检查真正的更改,而不是“肮脏”?有趣的问题。我不认为有什么方法可以让breeze根据比较来计算hasChanges,但是你可以把一

我有一个关于breeze实体的更改检测的问题

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

如果我将此属性更改回其初始值
'hello'
,我希望
hasChanges()
返回到
Unchanged
。但遗憾的是,这种状态仍然保持着变化


这是预期的行为吗?如果是这样的话,有没有办法让Breeze使用其原始值散列图来检查真正的更改,而不是“肮脏”?

有趣的问题。我不认为有什么方法可以让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();
    } 
});
这太离谱了。我目前没有一个环境来测试它,所以我不确定我是否会信任代码


希望这能有所帮助。

谢谢它完成了任务。但是,要正确处理空字符串和null,还需要做更多的工作。@Raerd,酷。很高兴这有帮助。当我得到一个合适的环境设置,我会看看更新是否有意义。在某种程度上,这取决于您希望如何处理空字符串和null(将它们视为相同或不同?)。