0

私はノックアウトで地面に足を踏み入れたばかりで、コードのいくつかの忌まわしさを一緒にマンジする前に、誰かが次のことを手伝ってくれるかどうか疑問に思っていました:

グループ配列があります

[{
  "id": 1,
  "name" : "tekken characters",
  "members": [1, 3]
}, //etc]

およびメンバー配列

[{ "id": 1, "name": "nina williams" }, {"id": 2, "name": "super mario"}, {"id": 3, "yoshi mitsu"}]

どちらも、個別の API 呼び出しを介して返されます。親子 (1 対多) の関係があります。Knockout.js を使用してこの種のデータに適用する最適なパターンは何ですか?

各配列を個別に使用していますが、たとえば、すべてのグループのリストとすべてのメンバーのリストがありますが、groupMembers のリストも必要です。すべてのメンバーが各グループに属しているわけではないことに注意してください。これは、ID を相互にマップする計算値ですか、それとも最善の方法は何ですか? 呼び出しはすべて ajax ベースであるため、タイミングが重要です。

誰かがこれを行った場合、またはこれらの種類の関係/データ構造を処理するための優れたリソースを知っている場合は、それらを共有すると便利です.

4

1 に答える 1

1

私の理解が正しければ、KO ビュー モデルは次のようになります。

function viewModel() {
    var self = this;     
    self.groups = ko.observableArray([]);
    self.members = ko.observableArray([]);     

    self.addToGroups = function(data) {
        // Add a new group/groups to view model (e.g. with AJAX)
    };
    self.addToMembers = function(data) {
        // Add a new member/members to view model
    };
    self.membersInGroups = ko.computed(function() {
        // Do some logic like getting members in groups
    }, this);
}

次に、グループとメンバーの両方にビュー モデルを使用します。

function groupViewModel(data) {
    var self = this;
    self.id = ko.observable(data.id);
    self.name = ko.observable(data.name);
    self.members = ko.observableArray(data.members);    
}

function memberViewModel(data) {
    var self = this;
    self.id = ko.observable(data.id);
    self.name = ko.observable(data.name);
}

フィドルをチェックしてください:http://jsfiddle.net/DcaP2/

于 2012-11-21T12:16:07.670 に答える