我们目前正在开发一个小型的 Hmtl/ JavaScript 应用程序,使用轻风.js(版本 1.3.4)。我们配置为使用 OData 协议来查询实体。
使用一个简单的实体,它就可以正常工作。如果我们正在查询一个复杂实体(具有电话号码和地址的两个复杂类型属性的联系人实体),我们会收到以下错误:
"TypeError: Cannot call method '_createInstanceCore' of null
at ctor.startTracking (<ServerAddress>/scripts/breeze.debug.js:14086:49)
at Array.forEach (native)
at ctor.startTracking (<ServerAddress>1/scripts/breeze.debug.js:14069:12)
at new ctor <ServerAddress>/scripts/breeze.debug.js:2952:52)
at proto._createEntityCore (<ServerAddress>1/scripts/breeze.debug.js:6478:9)
at mergeEntity <ServerAddress>/scripts/breeze.debug.js:12458:39)
at processMeta (<ServerAddress>/scripts/breeze.debug.js:12381:24)
at visitAndMerge (<ServerAddress>/scripts/breeze.debug.js:12361:16)
at <ServerAddress>/scripts/breeze.debug.js:12316:33
at Array.map (native)
From previous event:
at executeQueryCore (<ServerAddress>/scripts/breeze.debug.js:12290:77)
at proto.executeQuery (<ServerAddress>/scripts/breeze.debug.js:11243:23)
at DataContext.executeCachedQuery (<ServerAddress>/App/services/datacontext.js:138:33)
at DataContext.getContactsBySearchParams (<ServerAddress>/App/services/datacontext.js:111:25)
at Search.searchCmd.ko.asyncCommand.execute (<ServerAddress>/App/viewmodels/search.js:34:38)
at Search.ko.asyncCommand.self.execute (<ServerAddress>/scripts/knockout.command.js:57:29)
at HTMLButtonElement.ko.bindingHandlers.event.init (<ServerAddress>/scripts/knockout-2.2.1.debug.js:2318:66)"
在调试代码时,我们看到复杂属性实例的 dataType 字段为空:
val = prop.dataType._createInstanceCore(entity, prop.name);
我们还可以看到 complexTypeName 有一个奇怪的值格式,例如:
<ComplexTypeName>):#<NameSpace>
关于奇怪的复杂类型名称,我们注意到的另一件事是,entities 属性是复杂类型的集合(一个联系人可能有多个地址)。第 14085 行的检查总是返回 isScalar = true,但是应该创建一个复杂的数组。
复杂类型的 OData 元数据有问题吗?我们如何解决这个问题?
预先感谢您的回答。
干杯,马克