如何动态地将complextype对象添加到数组中

时间:2014-10-28 22:47:23

标签: arrays rest merge breeze complextype

我们创建了一个complextype(Carrier field)对象数组。见下面的元数据

{           shortName : 'Person',
            namespace : 'Demo',
            autoGeneratedKeyType : breeze.AutoGeneratedKeyType.Identity,
    "dataProperties": [
        {
            "name": "carriers",
            "complexTypeName":"Carrier:#Test",
            "isScalar":false
        }]
}

Carrier实体的定义如下:

 {
    "shortName": "Carrier",
    "namespace": "Test",
    "isComplexType": true,
    "dataProperties": [
        {
            "name": "Testing",
            "isScalar":true,
            "dataType": "String"
        }
    ]
    }

我们为上述实体提供了以下匹配数据:

{
  carriers: [
             {
                Testing : 'InputBox1'
             },
             {
                Testing : 'InputBox2'
             }
            ]
}

我们尝试使用以下方法将complextype对象(Carrier)动态添加到上面的carrier数组中:

var test = {
                "Testing" : "Test"
            };

            var result = manager.createEntity('Carrier', test);

上面的代码在行号12457的breeze.debug.js中抛出异常(undefined不是函数)(见下面的代码)

entity = entityType.createEntity(initialValues);

抛出异常,因为complextype实体没有' createEntity'功能在其中。

我们在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

很好的问题 - 抱歉,我没有机会早点解决这个问题。

添加complexType对象时,需要使用createInstance()方法而不是createEntity。

var thisEntityType = manager.metadataStore.getEntityType('Carrier');
var thisEntity = thisEntityType.createInstance(initialValues);

基本上,您获取complexType,然后使用您想要分配的值创建它的实例。请记住,初始值当然应该是哈希对象。通常我会包含一个辅助函数来为我这样做 -

function createComplexType(entityType, constructorProperties) {
    var thisEntityType = manager.metadataStore.getEntityType(entityType);
    var thisEntity = thisEntityType.createInstance(constructorProperties);
    return thisEntity;
}