将复杂的Array类型添加到Breeze.js模型中

时间:2013-09-25 03:12:13

标签: knockout.js breeze complextype

我从服务器接收一些复杂类型,我想将其转换为复杂类型的数组。没有从服务器返回的foreignKey将complexType映射回父实体,并且由于可以返回大量数据,我不想创建jsonResultsAdapter来映射属性,因为它添加了额外的处理时间。

我可能没有正确地执行此操作,但我以这种方式添加complexType -

metadataStore.addEntityType({
    shortName: "Parent",
    namespace: "MyNameSpace",
    dataProperties: {
        id: { dataType: "Int64", isPartOfKey: true },
        name: { dataType: "String" },
        complexChildren: { complexTypeName: "ComplexChild:#MyNameSpace", isScalar: false }
    }
});

metadataStore.addEntityType({
    shortName: "ComplexChild",
    namespace: "MyNameSpace",
    isComplexType: true,
    dataProperties: {
        notAForeignKeyId: { dataType: "Int64" },
        name: { dataType: "String" }
    }
});

这很好用,我可以看到对象图中的对象,我看到从服务器返回时所有内容都被映射,但当我尝试将其视为一个简单的observableArray时,它会抛出错误 -

ko.utils.arrayForEach(parents(), function (parent) {
    ko.utils.arrayForEach(parent.complexChildren(), function (child) {
        if (child === aComplexIdiot) { }
    });
});

在knockout2.3.0.debug.js的第101行引发错误。我不认为这是一个微风问题,因为一切都处理得当,所以我认为这是我如何映射complexType的,它只是没有多少意义为什么它正在发生除非必要,否则我不想开始创造工作。

2 个答案:

答案 0 :(得分:0)

只是为了澄清,听起来你能够返回一个复杂对象的数组,但Breeze不会自动将该集合包装在一个可观察的数组中。它是否正确?

如果是这样,那可能是一个微风的错误。在我们修复它之前的简单解决方法是自己包装返回的复杂对象集合。这有问题吗?

此外,有助于了解构成复杂对象数组的各个复杂对象的属性是否自身被包装为挖空对象。

答案 1 :(得分:0)

这里的短期修复是将数组视为一个简单的JavaScript数组,而不是Knockout可观察数组。所以代替 -

ko.utils.arrayForEach(parents(), function (parent) {
    ko.utils.arrayForEach(parent.complexChildren(), function (child) {
        if (child === aComplexIdiot) { }
    });
});

我正在使用

ko.utils.arrayForEach(parents(), function (parent) {
    $.each(parent.complexChildren, function (index, item) {
        if (item === aComplexIdiot) { }
    });
});

直到问题得到解决