Knockout.js foreach:但只有当比较为真时

时间:2012-01-15 11:18:51

标签: javascript knockout.js

如何通过比较来控制foreach忽略某些元素?

我想要的例子是这样的:

<div data-bind="foreach: entry where (entry.number > 10)">

所以我希望它做的是循环entry,但只有当当前entry的{​​{1}}值超过10时才会执行。

这可能吗?

5 个答案:

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