Foreach明显价值Knockout列表

时间:2014-03-13 17:47:00

标签: list knockout.js foreach

我正在尝试使用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的情况相同。

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>

1 个答案:

答案 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>