2012-12-03 3 views
0

녹아웃 정렬 플러그인을 사용하여 두 개의 배열로 필터링 된 한 개의 녹아웃 배열을 기반으로 두 개의 HTML 목록을 처리하려고합니다. 오류가 계속 발생하고 "observableArray"개체 대신 "계산 된"개체를 반환한다는 사실과 관련이있을 수 있다고 생각하지만 솔루션을 찾을 수 없었습니다. 녹아웃 두 목록 및 필터링 된 배열로 정렬 가능

http://jsfiddle.net/thebassix/Eg2DG/4/

나는 문제의 내 주요 부분이라고 생각 :

hiddenSeries = ko.computed(function() { 
    { 
     var seriesArray = self.series(); 
     return ko.utils.arrayFilter(seriesArray, function(item) { 
      return item.Hidden(); 
     }); 
    } 
}); 

unhiddenSeries = ko.computed(function() { 
    { 
     var seriesArray = self.series(); 
     return ko.utils.arrayFilter(seriesArray, function(item) { 
      return !(item.Hidden()); 
     }); 
    } 
}); 

답변

2

정렬 플러그가 올바른 위치에 다시 항목을 배치 할 수 있도록에서 운영하는 observableArray이 필요합니다.

가장 좋은 방법은 데이터를 두 개의 observableArrays로 분할 한 다음 결합 된 집합 (서버로 다시 전송해야하는 경우)을 나타내는 계산 된 데이터를 만드는 것입니다. 의 라인을 따라

아마 뭔가 :

var data = ko.mapping.fromJSON('[{"__type":"mediacenter+Series","ID":1,"Name":"seriesname232","Hidden":true,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":2,"Name":"kjhkuhkuh","Hidden":false,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":3,"Name":"trrde","Hidden":false,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":4,"Name":"1","Hidden":true,"MediaCenterID":1,"_destroy":false}]', mappingOptions); 

//take one pass through the records and put them in the appropriate bucket 
var hidden = [], 
    unhidden = []; 

ko.utils.arrayForEach(data(), function(item) { 
    if (item.Hidden()) { 
     hidden.push(item); 
    } 
    else { 
     unhidden.push(item); 
    } 
}); 

self.hiddenSeries = ko.observableArray(hidden); 
self.unhiddenSeries = ko.observableArray(unhidden); 

//define series as the two lists together 
self.series = ko.computed(function() { 
    return self.hiddenSeries().concat(self.unhiddenSeries()); 
}); 

샘플 : http://jsfiddle.net/rniemeyer/NhUEm/

+0

한 나는 바로이 작업을 수행 한 것입니다. – xdumaine

+0

고마워요! –