2012-11-20 215 views
0

我只是讓我在地上的腳敲除和我一起Munge時間一些代碼憎惡我想知道如果任何人都可以用下面的幫助之前:關係在淘汰賽,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的,因此時間安排非常重要。

如果有人已經這麼做了,或者知道處理這些關係/數據結構的好資源,那麼分享它們會很有用。

+0

你是否同時進行了兩個API調用,並且不確定哪一個首先被返回? – ryadavilli

+0

是的,這兩個電話是在同一時間進行的。我不能確定哪一個是先返回的。這些列表在加載後都是不變的。但是,用戶在羣組之間點擊時,羣組成員會發生變化。 – JonWells

回答

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/

+0

當成員標識更改時,它不更新組成員標識。那麼使用KO有什麼意義? – ahmet