Knockout.js用于每个:但只有当比较为真时

lvmkulzt  于 2022-11-10  发布在  其他
关注(0)|答案(5)|浏览(131)

如何通过使用比较来控制foreach忽略某些元素?
我想要的例子是这样的:

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

所以我希望它在entry中循环,但只在当前entrynumber值大于10时执行。
这可能吗?

tcbh2hod

tcbh2hod1#

目前knockout.js还不能做到这一点,但这是一个有趣的特性。你应该提交一个错误报告/联系作者,考虑在未来的版本中使用它。

方式1:

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

方式二:

编写一个自定义的过滤器方法,该方法为您提供一个与条件匹配的元素数组,并在foreach中使用该方法。

bvpmtnay

bvpmtnay2#

请尝试以下操作:

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

wwwo4jvm3#

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

9w11ddsr

9w11ddsr4#

那怎么办

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

使用下划线. js

i2byvkas

i2byvkas5#

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

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

相关问题