2014-03-13 65 views
3

我想從我的viewModel.Names使用LastNames填充無序列表。它填充良好,但我只想要不同的值,這是目前給多個相同的姓氏?我怎樣才能得到不同的價值觀?Foreach不同價值挖掘列表

更新:有一個名字中間名姓氏

視圖模型:

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

更新: 我可以用下面的函數來獲取不同的值,我不能將文本雖然數據綁定。這裏是我的城市數組的console.log的屏幕截圖,與LastName的情況相同。

enter image description here

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

這是我新的視圖模型:

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

回答

2

如果我理解正確的,你需要的是創建一個計算陣列像這樣:

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

用這個計算數組,在你的視圖中使用distinctNames變量會給你一個filtere d數組,基於Names數組的當前狀態。然後

你的foreach將是:

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

http://knockoutjs.com/documentation/computedObservables.html

編輯

您訪問foreach的數據錯誤的方式。您應該使用$data這referes到當前的foreach值:

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

請看看我的編輯。 – user3062114

+0

輪到你了。請參閱我的編輯 – EoiFirst

+0

謝謝你,$ data工作 – user3062114