1

我从服务器接收一些复杂类型,我想将它们转换为复杂类型的数组。没有从服务器返回的 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 的方式,它只是没有太多意义为什么会发生,我不想除非我必须,否则开始创造变通方法。

4

2 回答 2

0

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

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

此外,了解构成复杂对象数组的各个复杂对象的属性本身是否包装为剔除对象也会有所帮助。

于 2013-09-27T00:21:17.373 回答
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) { }
    });
});

直到问题解决

于 2013-12-23T15:39:35.900 回答