Javascript Can';如果';与'一起使用;foreach&x27;在';模板&x27;结合敲除

Javascript Can';如果';与'一起使用;foreach&x27;在';模板&x27;结合敲除,javascript,knockout.js,Javascript,Knockout.js,我正在使用剔除模板将可观察数组绑定到视图。我有一个对象数组,但我只想显示满足特定条件的对象。是否仍然可以使用敲除模板绑定来执行此操作?我目前使用的是第二种解决方案(有效),因为第一种解决方案会导致错误,但我觉得可能有一种更简洁的方法 所需解决方案(未定义产品的错误): 我的解决方案: <!-- ko foreach: { data: history, as: 'product' } --> <div class="productItem" data-bind="templa

我正在使用剔除模板将可观察数组绑定到视图。我有一个对象数组,但我只想显示满足特定条件的对象。是否仍然可以使用敲除模板绑定来执行此操作?我目前使用的是第二种解决方案(有效),因为第一种解决方案会导致错误,但我觉得可能有一种更简洁的方法

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


我的解决方案:

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

我找不到一个干净的方法在一条语句中完成它,但是您可以将
if
逻辑移到模板本身中吗

<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>

  • 请参阅此处的完整示例:

    使用
    计算的
    根据其
    计数
    成员过滤
    历史记录。或基于任意成员进行筛选的函数。

    模板绑定本身支持
    if
    参数


    它在文档中

    您至少应该将
    “history”
    的双引号替换为单引号。另外,我确信不能将
    foreach
    if
    组合在一个绑定中。问题是我希望能够显示列表的不同版本(基于元素的属性)。此解决方案要求我为要显示的列表的每个不同版本创建多个几乎相同的模板(使用不同的“如果”绑定)。您可以将要检查的字段作为要在模板中检查的参数传递
    <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>