1

単一の Breeze エンティティとその関連エンティティを、子 KO observableArrays (1 対多の関係) を持つ KnockOut 監視可能オブジェクト (配列ではない) にプルしようとしています。fetchEntitybyKey を使用してこれを行う方法がわかりません。述語を含む entityQuery を使用して行うことはできますが、observableArray が必要になります (これにより、後続のコーディングが難しくなり、マークアップがより複雑になります)。

これを行うコード例はありますか?

どうもありがとうジェレミー

4

1 に答える 1

3

特定のエンティティをキャッシュまたはリモート サービスから取得する便利な方法として、fetchEntityById を使用します。次に、別のクエリで展開を行う必要があります。リモートに移動して拡張する前に、必要なのがキャッシュされたバージョンで十分かどうかを確認する必要があるため、ほとんどの場合、2 つのステップで実行する必要があります。そのチェックは以下のコードには含まれていませんが、エンティティが部分的なエンティティとしてマークされているか、他の理由で更新が必要なエンティティとしてマークされている場合にのみ更新するようreturn refreshProject(p);に置き換えるだけです。return p.isPartial() ? refreshProject(p) : projectObservable(p);もちろん、エンティティを部分的としてマークするロジックを実装する必要があります。

var getProjectById = function (projectId, projectObservable) {
    // fetchEntityByKey will look in local cache first (because 3rd 
    // parm is true) and if not there then it will go remote
    return manager.fetchEntityByKey(
        'Project', projectId, true)
        .then(fetchSucceeded)
        .fail(queryFailed);

    // Refresh the entity from remote store
    function fetchSucceeded(data) {
        var p = data.entity;
        return refreshProject(p);
    }

    function refreshProject(project) {
        // fromEntities(someEntity) creates a query that gets only someEntity
        // from the remote service.
        return EntityQuery.fromEntities(project)
            .expand('navigationProp1.complexProp1,' +
                'navigationProp1.complexProp2,' +
                'navigationProp2.complexProp1,' +
                'navigationProp2.complexProp2')
            .using(manager).execute()
            .then(querySucceeded)
            .fail(queryFailed);
    }

    function querySucceeded(data) {
        var p = data.results[0];
        return projectObservable(p);
    }
};

expandプロジェクトのすべてのコントラクトのリストであるコントラクトなどのナビゲーション プロパティがある場合があるため、この句は非常に興味深いものです。コントラクトに含まれるプリミティブ データ タイプのみを使用して展開できますが.expand('contracts')、コントラクト タイプにサプライヤなどの 1 つ以上の複雑なプロパティ (さまざまなサプライヤの詳細を含む) がある場合、コントラクトのみを展開すると、サプライヤの Id のみが取り込まれます。のようなプロパティは存在しないため、構文は興味深いものですがcontracts.supplier、Breeze に との各コントラクトにサプライヤのすべてのプロパティを含めるように指示しますexpand('contracts.supplier')

于 2013-06-02T01:26:08.680 に答える