Knockout.js 向Breeze.js模型添加复杂数组类型

Knockout.js 向Breeze.js模型添加复杂数组类型,knockout.js,breeze,complextype,Knockout.js,Breeze,Complextype,我从服务器接收到一些复杂类型,希望将其转换为复杂类型数组。没有从服务器返回的foreignKey将complexType映射回父实体,并且由于可以返回的数据量很大,我不想创建一个jsonResultsAdapter来映射属性,因为它会增加额外的处理时间 我可能没有正确地执行此操作,但我以这种方式添加complexType- metadataStore.addEntityType({ shortName: "Parent", namespace: "MyNameSpace",

我从服务器接收到一些复杂类型,希望将其转换为复杂类型数组。没有从服务器返回的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的方式,它根本没有意义为什么会发生,我不想开始创建变通方法,除非我必须这样做。

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

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


另外,了解组成复杂对象数组的各个复杂对象的属性本身是否包装为淘汰对象也会有所帮助

这里的短期修复方法是将数组视为简单的JavaScript数组,而不是敲除可观察数组。因此,本条例取代—

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) { }
    });
});

在问题解决之前

是的,我认为情况就是这样,在此期间我所做的只是使用$。each并将其视为常规JavaScript对象数组并访问其可观察属性。是的,属性正在正确包装。我将尝试获取对象结构的屏幕截图,并将其发布在此处。谢谢,我将在下周尝试查看此内容,并尝试重新编写此问题,但我们现在有一些其他功能,因此任何修复都可能无法发布到下一个版本中,但我们将尝试在以后的版本中使用它。