1

複合型の配列に変換したい複合型をサーバーから受け取りました。complexType を親エンティティにマップするためにサーバーから返されるforeignKeyはありません。返される可能性のあるデータが大量であるため、追加の処理が追加されるため、プロパティをマップするための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 行目でエラーをスローします。すべてが適切に処理されているため、これは Breeze の問題ではないと思います。complexType をマッピングする方法だと思います。なぜそれが起こっているのか、あまり意味がありません。必要がない限り、回避策の作成を開始します。

4

2 に答える 2

0

明確にするために、複雑なオブジェクトの配列を返すことができるように聞こえますが、Breeze はコレクションを監視可能な配列に自動的にラップしません。これは正しいです?

もしそうなら、それは Breeze のバグかもしれません。修正するまでの簡単な回避策は、返された複合オブジェクト コレクションを自分でラップすることです。これは問題がありますか?

また、複雑なオブジェクト配列を構成する個々の複雑なオブジェクトのプロパティ自体がノックアウト オブジェクトとしてラップされているかどうかを知ることも役立ちます。

于 2013-09-27T00:21:17.373 に答える
0

ここでの短期的な修正は、配列を Knockout 観測可能配列ではなく単純な 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) { }
    });
});

問題が解決するまで

于 2013-12-23T15:39:35.900 に答える