可以'if'与'template'绑定Knockout中的'foreach'一起使用

时间:2015-12-04 21:07:19

标签: javascript knockout.js

我使用敲除模板将可观察数组绑定到视图。我有一个对象数组,但我想只显示满足某个条件的对象。无论如何使用敲除模板绑定来做到这一点?我目前正在使用第二个解决方案(有效),因为第一个导致错误,但我觉得可能有更简洁的方法来做到这一点。

所需解决方案(未定义产品的错误):

<div class="productItem" data-bind="template: { name: 'product-template',foreach:'history', as:'product', if: product.Count === 1}"></div>

我的解决方案解决方案:

<!-- ko foreach: { data: history, as: 'product' } -->
<div class="productItem" data-bind="template: { name: 'product-template', if: product.Count === 1}"></div>
<!-- /ko -->

3 个答案:

答案 0 :(得分:0)

I can't find a clean way to do it in one statement, but perhaps you could move the if logic into the template itself?

<ul data-bind="template: {name:'template', foreach: items}">

</ul>
<script type="text/html" id="template">
  <!-- ko if: show -->
    <li>
    <span data-bind="text: name"></span>
  </li>
  <!-- /ko -->
</script>

see the full example here: http://jsfiddle.net/nheu9uvq/1/

答案 1 :(得分:0)

使用computed根据history成员过滤Count。或者是基于任意成员过滤的函数。

答案 2 :(得分:0)

模板绑​​定本身支持if参数。

它在文档中。 http://knockoutjs.com/documentation/template-binding.html