2014-03-13 11 views
3

내 viewModel.Names의 LastNames를 사용하여 정렬되지 않은 목록을 채우려고합니다. 그것은 잘 채 웁니다하지만 난 단지 고유 한 값을 원하고 이것은 현재 동일한 성의 여러 제공하고 있습니까? 별개의 값을 얻으려면 어떻게해야합니까?Foreach 고유 값 녹아웃 목록

업데이트하십시오 FIRSTNAME 가운데 이름 성

보기 모델이 :

<ul data-bind="foreach: viewModel.Names"> 
    <li><a data-bind="text: LastName"></a></li> 
</ul> 

업데이트 : 나는 다음과 같은 기능을 가진 고유 한 값을 얻을 수 있습니다, 그래도 난 텍스트를 데이터 바인딩 할 수 없습니다. 다음은 LastName과 동일한 상황에있는 도시 배열의 내 console.log의 스크린 샷입니다. 여기

this.LastNames = ko.dependentObservable(function() { 
    var data = ko.utils.arrayMap(viewModel.Names(), function (item) { 
     return item.LastName() 
    }) 
    return ko.utils.arrayGetDistinctValues(data).sort(); 
}); 

enter image description here

나의 새로운보기 모델입니다 :

// this beeing your model 
this.distinctNames = ko.computed(function(){ 
    var distinct = []; 
    for (var i = 0; i < this.Names.length;i++) { 
     if (distinct.indexOf(this.Names[i]) == -1) 
      distinct.push({LastName:this.Names[i]}); 
    } 
    return distinct; 
}, this); 

:

<uldata-bind="foreach: LastNames"> 
    <li><input type="checkbox"/><a data-bind="text: []"></a></li> 
</ul> 

답변

2

내가 잘 이해하면, 당신이 필요한 것은이 같은 계산 된 배열을 만드는 것입니다 이 계산 된 배열을 사용하여보기에서 distinctNames 변수를 사용하면 filtere d 배열은 현재 상태 인 Names 배열을 기반으로합니다.

귀하의 foreach는 것입니다 :

<ul data-bind="foreach: viewModel.distinctNames"> 
    <li><a data-bind="text: LastName"></a></li> 
</ul> 

당신은 foreach의 데이터를 잘못된 방향으로 접근 http://knockoutjs.com/documentation/computedObservables.html

편집

를 참조하십시오. 현재 foreach 값을 다시 사용하는 $data을 사용해야합니다.

<ul data-bind="foreach: LastNames"> 
    <li><input type="checkbox"/><a data-bind="text: $data"></a></li> 
</ul> 
+0

제 편집을 참조하십시오. – user3062114

+0

당신의 차례. 내 편집보기 – EoiFirst

+0

감사합니다. $ 데이터가 작동했습니다. – user3062114