0

「子」エンティティをロードするViewModelがあり、ロードされた各子に基づいて「孫」エンティティも表示したいと考えています。物事を単純化するために、これらのオブジェクトを照会し、ブラウザーの適切な「ツリー」の下に表示する方法を特定する助けが必要です (コーディング言語を解体して申し訳ありません: ))

Knockout を使用してデータをバインドし、Breeze でエンティティをロードしています。この質問は、いつ追加の複合型を Breeze エンティティに拡張するかの拡張です

また、私のモデルは最初に EF コードであり、子と孫の間の 1 対多の関係を定義する構成があり、 Breeze はこれを既に知っていると思いますが、これを利用する方法を見つけようとしています。

childs.js (ビューモデル)

var childs = ko.observableArray();
var grandChilds = ko.observableArray();
var parentId = ko.observable();

function refresh() {
    var parentId = (parent).parentId;  // << for ex. don't worry about this line : )
    return Q.all([getChildren(), getGrandChildren()]);
}

function getChildren() {
    return datacontext.getChildren(childs, parentId);
}

function getGrandChildren() {
    return datacontext.getGrandChildren(grandChilds);
}

およびビュー(childs.html)

<div data-bind="foreach: childs">
    <div title="Go to Child Details">
        <div><strong data-bind="text: name"></strong></div>
        <div><strong data-bind="text: gender().description"></strong></div>
    </div>
    <div>
        <!-- ko.compose { view: grandChilds} --><!--/ko-->
    </div>
</div>

参照用の現在のデータコンテキスト

    var getChilds= function (childsObservable, parentId) {

        var query = EntityQuery.from('Childs')
            .where('parentId', '==', parentId)
            .expand('grandChildren')
            .orderBy('id');

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            if (childsObservable) {
                childsObservable(data.results);
            }
            logger.log('Retrieved [Childs] and [Grandchilds] from remote data source', data, system.getModuleId(datacontext), true);
        }
    };

子供の孫だけを読み込みたいのですが、子供が多いので、すべての孫を1つのリストに表示するのではなく、正しい子の下に孫のみを表示したいのです。どんな助けでも大歓迎です。

4

1 に答える 1

1

関連エンティティのクエリと「リンク」には、3 つの基本的なアプローチがあります。

1) EntityQuery.expandを使用する

2) EntityAspect.loadNavigationPropertyを使用する

3) たまたまグラフ全体を包含する「広範な」EntityQuery を作成すると、すべての親子関係が自動的にリンクされます。

于 2013-04-24T19:34:32.020 に答える