2012-11-20 13 views
0

난 그냥 녹아웃으로 누군가가 다음과 같이 도움이 될 수 있다면 내가 함께 코드의 일부 가증가 궁금 해서요로 찾으면 전에 땅에 내 발을 얻고있다 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를 서로 매핑하거나 가장 좋은 방법은 무엇입니까? 호출은 모두 아약스 기반이므로 타이밍이 중요합니다.

누구든지 이러한 작업을 수행했거나 이러한 종류의 관계/데이터 구조를 처리하는 데 유용한 리소스를 알고 있다면 공유하는 것이 유용 할 것입니다.

+0

두 API 호출을 동시에 만들고 있는데 어느 것이 먼저 반환되는지 확실하지 않습니까? – ryadavilli

+0

예, 두 통화가 동시에 이루어집니다. 그리고 어떤 것이 먼저 반환되는지 확신 할 수 없습니다. 목록은 일단로드되면 상수가됩니다. 그러나 사용자가 그룹 간을 클릭하면 그룹 구성원이 변경됩니다. – JonWells

답변

1

내가 올바르게 다음 KO보기 모델이 같은 보일 수 있습니다 이해한다면 :

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); 
} 

체크 아웃 바이올린 :

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); 
} 

가 그럼 난 그룹과 구성원 모두보기 모델을 사용을 : http://jsfiddle.net/DcaP2/

+0

구성원 ID가 변경되면 그룹 구성원 ID가 업데이트되지 않습니다. 그럼 KO를 사용하는 의미는 무엇입니까? – ahmet