2012-01-15 83 views
18

我如何控制的foreach忽略使用比较某些元素?Knockout.js的foreach:但只有当比较结果为真

我想要的例子是这样的:

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

所以,我希望它做的是循环遍历entry的,但是当电流entry拥有超过10 number值只执行。

这是可能的吗?

回答

23

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

方法1:

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

方式2:
编写自定义过滤器的方法,让您匹配您的条件,并在您的foreach使用该元素的数组。

+0

我跟着filteredEntries **路** 1,你的答案之前,作为一种替代 - 猜我会坚持它。谢谢! – LouwHopley 2012-01-15 13:31:12

+0

没问题,我有点知道,因为这是通常的方式,但反正它包括:d – 2012-01-15 13:37:09

17

试试这个:

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

@JustMe嗨,不错的答案,我没有斑的< - 如果KO:选择 - >在第一,直到我做了一些研究。注意if绑定可以在注释中工作,这一点很重要。 http://knockoutjs.com/documentation/if-binding.html也可能是一个好主意来修改你的答案,以便它特别适用于这个问题,例如使用“entry.number”这种方式可以更容易地看到它是如何应用于解决问题的。 – 2012-05-11 17:43:00

+0

感谢@AlexKey我是KnockoutJS的新成员,我通过了教程,他们非常有用。 – JustMe 2012-09-18 04:48:12

+0

适用于过滤表格行。 – Rake36 2013-05-07 19:59:08

4

什么

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

使用underscore.js

+0

不错!下划线是da-bomb – skrile 2014-10-10 19:24:06