2014-02-15 2 views
0

knockoutjs에 계층 구조가 있습니다. 이 구조는 N 깊은 곳으로 갈 수 있지만 일상적으로 사용하면 깊이가 지나지 않습니다. 그것은 대략 이와 같이 보입니다.상태가 객체 배열 만들기

특정 상태에있는 모델 개체의 플랫 목록을 제공하는 계산 기능을 만들고 싶습니다.

나는이 작업을 한 단계 깊게 수행 할 것입니다.

self.SomeStatus = ko.computed(function() { 
    ko.utils.arrayMap(self.Children(), function(item) { 
     if(item.Status() === "SomeStatus") 
      return item; 
    }); 
} 

이 상태가 동일한 N 레벨의 깊은 모델 배열을 반환하려면 어떻게 구현할 수 있습니까?

미리 감사드립니다. 과 같이,이 경우

self.items = ko.observableArray(); 
function flattenList(flattenedList, currentChildList){ 
    var childCount = currentChildList.length; 
    for (var i = 0; i < childCount; i++){ 
     flattenedList.push(currentChildList[i]); 
     flattenList(flattenedList, currentChildList[i].children()); 
    } 
} 
this.flattenedList = ko.computed(function(){ 
    var flattenedList = []; 
    flattenList(flattenedList, self.items()); 
    return flattenedList; 
}); 

아이들이 ItemViewModel에 의해 정의된다 :

답변

0

그냥 다음과 유사하여 트리를 통해 산책 및 배열에 모든 노드를 추가하는 재귀 함수를 만들

function ItemViewModel(name){ 
    var self = this; 

    self.name = name; 
    self.children = ko.observableArray(); 
} 

items 관찰 가능 또는 children 관찰 항목이 변경 될 때마다 전체 트리를 반복합니다. 나는 그것에 대한 jsfiddle을 작성했으며, 이는 http://jsfiddle.net/T42LV/에 있습니다.

+0

물론 for 루프에 필터를 추가하면 찾고있는 상태의 항목 만 누를 수 있습니다. –

관련 문제