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

Lou*_*ley 26 javascript knockout.js

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

我想要的例子是这样的:

<div data-bind="foreach: entry where (entry.number > 10)">
Run Code Online (Sandbox Code Playgroud)

所以,我希望它做的是遍历entry的,但是当电流只执行entry了一个number超过10的值.

这可能吗?

Bjö*_*ser 28

目前这对于knockout.js是不可能的,但这是一个有趣的功能.您应该提交错误报告/联系作者以考虑将来的版本.

方式1:

<div data-bind="foreach: entry">
     <div data-bind="if: entry.number > 10"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

方法2:
编写一个自定义过滤方法,为您提供符合条件的元素数组,并在您的条件中使用它foreach.


Jus*_*tMe 18

试试这个:

   <div data-bind="foreach: editingItem.columns">
         <!-- ko if: Selected-->
         <div data-bind="text: Name"></div>
          <input type="text"/>
             <!-- /ko -->
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 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);
Run Code Online (Sandbox Code Playgroud)

然后您可以像往常一样将数据绑定到filteredEntries