我正在和微风一起玩打字游戏。我正在尝试使用以下typescript代码创建一个类型:
var eto = <breeze.EntityTypeOptions>new Object();
eto.shortName = "type1";
eto.namespace = "mod1";
eto.dataProperties = new Array();
eto.autoGeneratedKeyType = breeze.AutoGeneratedKeyType.Identity;
var dpo = <breeze.DataPropertyOptions>new Object();
dpo.name = "id";
dpo.dataType = breeze.DataType.Int32;
dpo.isNullable = false;
dpo.isPartOfKey = true;
var dp = new breeze.DataProperty(dpo);
eto.dataProperties.push(dp);
dpo = <breeze.DataPropertyOptions>new Object();
dpo.name = "prop1";
dpo.dataType = breeze.DataType.Int32;
dpo.isNullable = false;
dpo.isPartOfKey = false;
dp = new breeze.DataProperty(dpo);
eto.dataProperties.push(dp);
var et = new breeze.EntityType(eto);
store.addEntityType(et);
store.registerEntityTypeCtor(et.shortName, type1);但是,下面这行代码失败了:
store.addEntityType(et);当"dataProperties“是一个数组,而不是一个对象时,就像上面的例子一样,看起来有个问题……我是一个javascript新手,所以我怀疑我做错了什么……但我怀疑下面的微风代码,特别是下面的代码:
propObj.forEach(entityType.addProperty);永远不会起作用,因为addProperty方法的实现利用了"this“上下文……再一次,我可能错了,在这种情况下,如果有人能帮我一把,我将不胜感激。谢谢
// Used by both ComplexType and EntityType
function addProperties(entityType, propObj, ctor) {
if (!propObj) return;
if (Array.isArray(propObj)) {
propObj.forEach(entityType.addProperty);
} else if (typeof (propObj) === 'object') {
for (var key in propObj) {
if (__hasOwnProperty(propObj, key)) {
var value = propObj[key];
value.name = key;
var prop = new ctor(value);
entityType.addProperty(prop);
}
}
} else {
throw new Error("The 'dataProperties' or 'navigationProperties' values must be either an array of data/nav properties or an object where each property defines a data/nav property");
}
}发布于 2013-06-04 02:52:18
编辑:这个问题已经从1.3.5版本开始修复了,现在可以使用了。
好的,这是一个错误,将在今天晚些时候或明天发布的版本中修复。感谢您找到并报告它。:)
同时,有一个简单的解决方法。只需在添加属性之前创建EntityType即可。例如(使用原始的js而不是TypeScript,但你会明白的)。
var eto = {}
eto.shortName = "type1";
eto.namespace = "mod1";
eto.dataProperties = new Array();
eto.autoGeneratedKeyType = breeze.AutoGeneratedKeyType.Identity;
var et = new breeze.EntityType(eto);
var dpo = {};
dpo.name = "id";
dpo.dataType = breeze.DataType.Int32;
dpo.isNullable = false;
dpo.isPartOfKey = true;
var dp = new breeze.DataProperty(dpo);
et.addProperty(dp);
dpo = {};
dpo.name = "prop1";
dpo.dataType = breeze.DataType.Int32;
dpo.isNullable = false;
dpo.isPartOfKey = false;
dp = new breeze.DataProperty(dpo);
et.addProperty(dp);
store.addEntityType(et);https://stackoverflow.com/questions/16902520
复制相似问题