Breeze实体经理“;hasChanges“;属性-如何找出触发“属性”的原因;“真的”;国家?

Breeze实体经理“;hasChanges“;属性-如何找出触发“属性”的原因;“真的”;国家?,breeze,Breeze,我的datacontext中有以下事件处理程序: manager.hasChangesChanged.subscribe(function (eventArgs) { hasChanges(eventArgs.hasChanges); }); 在Chrome中,我在“haschanges(eventArg.haschanges);”行上设置了一个断点 当我加载我的应用程序并开始抓取数据的过程时,这个断点就被击中了。然后它继续被反复点击,“hasChanges”属

我的datacontext中有以下事件处理程序:

    manager.hasChangesChanged.subscribe(function (eventArgs) {
        hasChanges(eventArgs.hasChanges);
    });
在Chrome中,我在“haschanges(eventArg.haschanges);”行上设置了一个断点

当我加载我的应用程序并开始抓取数据的过程时,这个断点就被击中了。然后它继续被反复点击,“hasChanges”属性在“true”和“false”之间变化很多次

通过进一步的调试断点,我知道通过导航属性“扩展”相关表的简单查询会触发对我的“HasChangesAnged”事件处理程序的访问

我不知道的是,由于“eventArgs”太大太复杂,所以我的5个或更多相关实体中的哪一个正在被检索,从而触发了“hasChanges”属性上的“true”。我可以检查eventArgs中是否有属性来确定哪个当前实体导致了HasChangesAnged事件处理程序的跳闸

我很困惑,为什么我正在做的任何事情都是将“hasChanges”设置为true,因为我在第一个实例中所做的就是检索数据。据我所知,在实体经理确信某些事情发生了变化时,没有任何变化

更详细地说,我的应用程序在等待用户第一次输入的位置预取了大量用于树结构的数据。由于到目前为止,用户还没有机会触摸应用程序中的任何内容,为什么breeze会认为,当从数据库中读入任何相关实体时,它们已经发生了更改?

如果您需要有关更改内容的细粒度信息,请使用EntityManager.entityChanged事件。此事件提供了更多详细信息,但触发频率更高

如果希望获得有关更改内容的细粒度信息,请使用EntityManager.entityChanged事件。此事件提供了更多详细信息,但触发频率更高


是的,找到了它并使用了它。我收到了一车“propertyChanged”通知!我还是不明白到底怎么会是这样。是不是因为我只选择了几个字段,所以它是一个局部实体?还是因为我正在扩展一个与导航属性相关联的表?这两种情况是否通常会导致“hasChanged=true”属性?是否有一个快速修复方法可以让我等到所有人都完成加载,然后全局重置“haschanges”标志,以便我只能跟踪用户何时主动进行更改?EntityManager.hasChangedChanged event arg属性hasChanged=true只应在需要保存的某些更改发生时出现,因此,一个简单的查询通常不会触发这种情况。相比之下,EntityManager.entityChanged事件的触发原因除此之外还有许多其他原因(请参阅EntityAction属性-EntityAction.PropertyChange和EntityAction.EntityStateChange都可能是导致“hasChanged”更改的操作的候选项。我真的不确定是什么导致了它仍然…太多事件似乎让我无法理解发生了什么。我想我可能需要对我的p进行调试版本。)使用对单个实体及其状态的大量调用老化,以便我可以看到哪个实体已“更改”开始时。我可能会创建一个填充在
EntityManager.entityChanged
事件中的
entityChangedEvent
参数的全局列表。然后我会中断
hasChangesChanged
处理程序,查看最后几个
entityChangedEvent
参数是什么。我可能会在检查之间清除该列表。这样,您可以n研究导致<代码>HasChangesAnged事件触发的事件。似乎这个讨论现在是一个相关的答案,是的,找到了一个并使用了它。我得到了一车“propertyChanged”通知!我仍然不明白这到底是怎么回事。这是因为我只选择了几个字段,所以它是一个部分实体吗?还是因为我正在扩展一个与导航属性相关联的表?这两种情况中的任何一种都会导致“hasChanged=true”吗属性?是否有一个快速修复方法可以让我等到所有加载完成,然后重置“haschanges”全局标记,以便我只能跟踪用户何时主动进行更改?EntityManager.hasChangedChanged事件arg属性hasChanged=true仅在需要保存的内容发生更改时才会出现,因此简单查询通常不会触发此事件。相比之下,EntityManager.entityChanged事件会按如下方式触发:还有其他一些原因(请参阅EntityAction属性-EntityAction.PropertyChange和EntityAction.EntityStateChange都可能是导致“hasChanged”更改的操作的候选项。我真的不确定是什么导致了它仍然…太多事件似乎让我无法理解发生了什么。我想我可能需要对我的p进行调试版本。)使用对单个实体及其状态的大量调用老化,以便我可以看到哪个实体已“更改”开始时。我可能会创建一个填充在
EntityManager.entityChanged
事件中的
entityChangedEvent
参数的全局列表。然后我会中断
hasChangesChanged
处理程序,查看最后几个
entityChangedEvent
参数是什么。我可能会在检查之间清除该列表。这样,您可以n研究导致触发
HasChangesAnged
事件的事件。似乎这一讨论是一个相关的答案。在查询成功回调期间,您是否对实体做了一些事情?我只是在John Papa的Angular code Camper示例中的
HasChangesAnged
侦听器上设置了一个断点,它不会触发fter查询;它仅在真正更改后激发。将相同的处理程序添加到Todo Require敲除示例中,并且它也不会在查询后激发。a