1

データベースからエンティティをロードし、それを使用して (モデル クラスから) ICollection を使用して、いくつかの子データをロードします。これは、1対多の関係であれば、個々のビューモデルから行うのに十分簡単ですが、もう少し複雑な構造があります-

親には多くの子供がいます。各子には多くの孫がいて、適切な子にリンクする必要があります。ヒエラルキーはそのままにしておく必要があります。

これまでに思いついた他のオプションは最善の方法ではないかもしれないので、私の質問は - 孫をロードするためのベストプラクティスは何ですか - または他の方法ですか?

metadataStore の構成中にコンストラクターで -

function configureMetadataStore(metadataStore) {
    metadataStore.registerEntityTypeCtor(
        'Child', null, childInitializer);
}

function childInitializer(child) {
    child.grandchildren = (Do something here)
        return grandchildren;
    });
}

子が取り込まれているビューモデルで -

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

var addGrandChildren = function () {
    $.each(childs, function (i) {
        var grandChildren = ko.observableArray();
        var childId = $(this).data(id);
        datacontext.getGrandChildren(grandChildren, childId);
    });
    return;
};

それとも他の方法ですか?

4

2 に答える 2

1

リレーションシップが一方向でない場合、Breeze エンティティは、クエリを実行すると自動的に相互にフックされます。(編集: v 1.3.5 の時点で、そよ風は一方向の関係も接続します。)

これは、クエリを使用してたまたま関連している n 個のエンティティを抽出すると、それらすべてが正しい方法で自動的に相互にリンクされることを意味します。EntityQuery.expand メソッドを使用する場合も同様です。したがって、問題は、最小限の呼び出しでグラフのどの部分を照会するかだけです。

注: 本当にグラフを「ウォーク」したい場合は、EntityAspect.loadNavigationProperty メソッドも参照する必要があります。ただし、大きなグラフを扱っている場合、これはパフォーマンスが低下する可能性があります。

于 2013-04-24T18:43:00.837 に答える
0

Breezejs (1.4.2) q (0.9.7) にも同じ問題があります。エンティティの計算されたプロパティを追加したいです。

var doctorInitializer = function (doctor) {
    doctor.FullName = ko.computed(function () {           
        return doctor.FirstName() + " " + doctor.MiddleName() + " " + doctor.LastName() + " " + doctor.SurName();           
    });
};

var doctorName = '/breeze/polyclinic', 
doctorManager = new breeze.EntityManager(doctorName);
var store = doctorManager.metadataStore;
store.registerEntityTypeCtor("Doctor", null, doctorInitializer);

コンストラクターに計算されたノックアウトを追加してみます

var doctor = function () {
  self.FullName = ko.computed( {
    read: function() {
       return self.FirstName + " " + self.MiddleName + " " + self.LastName + " " + self.SurName;
    },
    deferEvaluation: true
  });
};
store.registerEntityTypeCtor("Doctor", doctorInitializer);

どちらの場合も、括弧を削除した場合にのみ機能しますが、MiddleName と SurName は必要なく、空の文字列の代わりに null を取得しました

これは私が持っているエラーですhttp://screencast.com/t/bP9Xnmf9Jm

于 2013-09-28T01:43:25.013 に答える