Javascript Breezejs新版本';s合并实体功能

Javascript Breezejs新版本';s合并实体功能,javascript,breeze,Javascript,Breeze,我最近升级到了Breezejs的最新版本(从1.3.6升级到1.4.1)。 在这种情况下,我从服务器获取实体,然后得到如下结果 { "$type": "X.Y.Reference, X.Y", "ReferenceTypeId": "BookEdited", "ShouldDisplay": true, "ShortTitle": "Informationsethik 1995", "Title": "Informationsethik", "Ye

我最近升级到了Breezejs的最新版本(从1.3.6升级到1.4.1)。 在这种情况下,我从服务器获取实体,然后得到如下结果

{
    "$type": "X.Y.Reference, X.Y",
    "ReferenceTypeId": "BookEdited",
    "ShouldDisplay": true,
    "ShortTitle": "Informationsethik 1995",
    "Title": "Informationsethik",
    "Year": "1995",
    "YearResolved": "1995",
    "CloudProjectSubset": "ReferenceNavigation",
    "Id": "34e1f0d1-eda7-4926-a13f-e75e43ff66b5",
    "ProjectId": "syncproject1"
  },
我希望您注意到“ShouldDisplay”属性设置为true。 后来,由于我的应用程序的逻辑,我做了另一个查询,在其他查询中,我得到了相同的实体,这次是这样的:

{
    "$type": "X.Y.Reference, X.Y",
    "ReferenceTypeId": "BookEdited",
    "ShortTitle": "Informationsethik 1995",
    "Title": "Informationsethik",
    "Year": "1995",
    "YearResolved": "1995",
    "CloudProjectSubset": "ReferenceNavigation",
    "Id": "34e1f0d1-eda7-4926-a13f-e75e43ff66b5",
    "ProjectId": "syncproject1"
  },
注意,我不再获得属性“ShouldDisplay”,由于我的逻辑,它是正确的。 Breezejs在每次查询后将实体合并到本地缓存中。问题是,在第二次查询之后使用1.3.6版时,我仍然将“ShouldDisplay”设置为true(这是我想要的),因为第二次查询返回的是没有该属性的相同实体,而该属性不会被覆盖。然而,如果我使用版本1.4.1,属性(即使没有序列化)无论如何都会被覆盖并设置为null,这不是我想要的。 简而言之,在我看来,在1.3.6版中,只有返回的属性被实际覆盖,而在1.4.1版中,所有属性都被覆盖。
在Breezejs或web上,我没有找到关于这种“合并”行为的信息,只有关于合并策略的设置,关于待定的更改,这不是我现在面临的问题。有人知道这是Breezejs的工作方式还是我遗漏了一些配置?谢谢。

好的,在调试了Breeze的源代码之后,我已经找到了答案。我会发布我的解决方案,以防它对某些人有用,或者对Breeze的人有用,如果他们想检查这是一个功能还是一个bug的话。 我换了这条线

return val !== undefined ? val : dp.defaultValue;
return val;
用这条线

return val !== undefined ? val : dp.defaultValue;
return val;
在方法ctor.getRawValueFromServer和ctor.getRawValueFromClient中。关键是:当一个实体必须合并时,会触发一个名为updateEntity的方法,该方法循环遍历目标实体属性,并检查它们是否在从服务器获取的原始实体中定义。然后,如果原始实体上的属性值不是“未定义”,则该方法将替换目标实体上的属性。问题是,对于原始代码行(如上所示),如果值为“未定义”,则返回属性的默认值,在我的情况下,该值为“null”,因此替换了实体的所有属性。现在它工作得很好。我已经在Breezejs的最新版本(截至今天)上做了这个修正,目前是1.4.9。
希望它能帮助别人。

微风的最新版本是1.4.9。这是你用的吗?是的。我昨天已经更新了。在1.3.6版本之前,它运行良好(事实上,我在下面的回答中指出的代码行没有!==未定义的检查),从1.4.1版本到未来的版本,我昨天似乎解决了这个问题。仍然不知道这是一个特性还是一个bug。