Knockout.jsforeach:但仅当比较为真时

Knockout.js foreach: but only when comparison is true

本文关键字:比较 jsforeach Knockout      更新时间:2023-09-26

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

例如,我想要的是这样的东西:

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

因此,我希望它在entry中循环,但仅在当前entrynumber值大于10时执行。

这样做可能吗?

目前knockout.js无法做到这一点,但这是一个有趣的功能。您应该提交一份错误报告/联系作者,以便考虑将来的版本。

方式1:

<div data-bind="foreach: entry">
     <div data-bind="if: entry.number > 10"></div>
</div>

方式2:
编写一个自定义筛选方法,为您提供一个匹配条件的元素数组,并在foreach中使用该方法。

试试这个:

   <div data-bind="foreach: editingItem.columns">
         <!-- ko if: Selected-->
         <div data-bind="text: Name"></div>
          <input type="text"/>
             <!-- /ko -->

我认为最好使用内置的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

怎么样

<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">

使用undercore.js

您可以使用array.filter函数来过滤数组,不要忘记传递"this"

<div data-bind="foreach: yourArrayHere.filter(function(entry){return entry.number > 10}, this)">