我发现了一个有关ComplexType属性的错误。我有一个Object,它有一个属性,它是我在客户端元数据中定义为Complex属性的其他对象的集合,即“isComplexType:true”。但是,复杂类型的所有属性都设置为“undefined”。我做了一些调试,发现了这个:
// target and source may not be entities that can also be complexTypes.
function updatePropertyFromRawEntity(dp, target, rawSource) {
var val = getPropertyFromRawEntity(rawSource, dp);
if (val === undefined) return;
if (dp.isComplexProperty) {
var coVal = target.getProperty(dp.name);
dp.dataType.dataProperties.forEach(function (cdp) {
// recursive call
updatePropertyFromRawEntity(cdp, coVal, val);
});
} else {
target.setProperty(dp.name, val);
}
}
rawSource参数是一个数组(在complexTypes的情况下)是一个对象数组。所以问题是当调用getPropertyFromRawEntity()时,它传递一个数组而不是一个对象:
function getPropertyFromRawEntity(rawEntity, dp) {
var propName = dp.nameOnServer || dp.isUnmapped && dp.name;
return parseValueForDp(rawEntity[propName], dp);
}
因此,rawEntity [propName]将始终未定义,因为它是一个数组。
答案 0 :(得分:0)
Breeze ComplexType具有由元数据指定的明确定义的结构。任何属性(除了)键的数据类型都可以是complexType。但是,我认为,你想要的是一种“无类型”的结构。这可以通过将属性定义为具有“Undefined”的数据类型来实现,例如:
var newProp = new DataProperty({
name: "Foo"
dataType: DataType.Undefined,
isNullable: true,
isUnmapped: true
});
entityType.addProperty(newProp);
“Undefined”dataType将接受任何类型和结构的数据。