2

我遇到了 Breeze.js 版本 1.4.12 的错误。我有一个实体 OrderLine,它有一个复合主键,由一个 GUID 字段 (OrderId) 和一个整数字段 (LineNumber) 组成。该实体有一个自引用外键,由两个字段组成:DependsOnOrderId 和 DependsOnLineNumber。

在创建 OrderLine 实体的新实例并传递初始值对象时,我可以将值分配给外键字段,一切都按预期工作。但是,我的问题在于在创建实体后尝试分配值。为 DependsOnOrderId 属性分配值可以正常工作。当我为 DependsOnLineNumber 属性赋值时,我收到一条错误消息:Type Error: undefined is not a function。此错误发生在微风.debug.js:4275 行,调试会话显示它正在尝试对toLowerCase()复合键的整​​数字段值运行方法。

下面引用了似乎导致问题的两行:

if (kp.dataType === DataType.Guid) {
    keyValues[i] && keyValues[i].toLowerCase();

我能够通过调整以下行来令人满意地解决这个问题:

if (kp.dataType === DataType.Guid) {
    keyValues[i] = keyValues[i] && ( ( keyValues[i].toLowerCase && keyValues[i].toLowerCase() ) || keyValues[i] );

这只是作为解决问题的概念证明而放在一起,并未在所有情况下都经过测试,但它确保在比较作为 GUID/非 GUID 复合键一部分的非 GUID 值时,toLowerCase()调用是未尝试针对没有该方法的值。

是否有其他人遇到此错误或有修复建议?我正在考虑在 GitHub 上提出一个拉取请求,但想检查一下是否存在此问题的其他实例,或者我建议的修复可能产生的副作用。

谢谢!

4

1 回答 1

0

您的修复看起来不错,我已将其添加到breeze-client@2.0.0-beta.1

感谢您对此的帮助。很抱歉花了这么长时间。

于 2019-10-10T23:17:09.303 回答