我遇到了 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 上提出一个拉取请求,但想检查一下是否存在此问题的其他实例,或者我建议的修复可能产生的副作用。
谢谢!