如何通过比较来控制foreach忽略某些元素?
我想要的例子是这样的:
<div data-bind="foreach: entry where (entry.number > 10)">
所以我希望它做的是循环entry
,但只有当当前entry
的{{1}}值超过10时才会执行。
这可能吗?
答案 0 :(得分:27)
目前对于knockout.js来说这是不可能的,但这是一个有趣的功能。您应该提交错误报告/联系作者以考虑将来的版本。
方式1:
<div data-bind="foreach: entry">
<div data-bind="if: entry.number > 10"></div>
</div>
方式2:
编写一个自定义过滤器方法,为您提供符合条件的元素数组,并在foreach
中使用它。
答案 1 :(得分:17)
试试这个:
<div data-bind="foreach: editingItem.columns">
<!-- ko if: Selected-->
<div data-bind="text: Name"></div>
<input type="text"/>
<!-- /ko -->
答案 2 :(得分:8)
我认为最好使用内置的arrayFilter方法(参见http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html)
viewModel.filteredEntries = ko.computed(function() {
return ko.utils.arrayFilter(this.entries(), function(item) {
return item.number > 10;
});
}, viewModel);
然后您可以像往常一样将数据绑定到filteredEntries
答案 3 :(得分:4)
怎么样?
<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">
使用underscore.js
答案 4 :(得分:-1)
您可以使用array.filter函数来过滤数组,别忘了传递“ this”
<div data-bind="foreach: yourArrayHere.filter(function(entry){return entry.number > 10}, this)">