我正在尝试使用viewModel.Names中的LastNames填充无序列表。它填充很好但我只想要不同的值,这目前给出多个相同的LastName?我如何获得不同的值?
更新:有一个FirstName MiddleName LastName
查看型号:
<ul data-bind="foreach: viewModel.Names">
<li><a data-bind="text: LastName"></a></li>
</ul>
更新: 我可以使用以下函数获取不同的值,但我无法对文本进行数据绑定。这是我的一系列城市的console.log的屏幕截图,与LastName的情况相同。
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>
答案 0 :(得分: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
变量将根据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
来引用当前的foreach值:
<ul data-bind="foreach: LastNames">
<li><input type="checkbox"/><a data-bind="text: $data"></a></li>
</ul>