Knockout中的关系,js

时间:2012-11-20 13:54:07

标签: javascript knockout.js

我只是在淘汰赛中脱颖而出,在我拼凑一些令人厌恶的代码之前,我想知道如果有人可以提供以下帮助:

我有一个组数组

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

和一个成员数组

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

两者都是通过单独的API调用返回的。有一个父母子女(一对多)的关系。使用Knockout.js应用于此类数据的最佳模式是什么?

虽然我确实单独使用每个数组,例如我有我所有组的列表和所有成员的列表,但我还想要一个groupMembers列表。请注意,并非所有成员都属于每个组。这是一个计算值,我将id映射到彼此,或者,最好的方法是什么?这些调用都是基于ajax的,所以时间很重要。

如果有人这样做了,或者知道处理这些关系/数据结构的良好资源,那么分享它们会很有用。

1 个答案:

答案 0 :(得分: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/