我有一段代码试图在其中显示一些基于$ index值的标记,并将其与可观察值进行比较。

<div class='config-summary-chart-section'>
  <!-- ko foreach: codeCoverageStats -->
  <div class='config-stat-chart-section'>
  <div class='chart-heading' data-bind='text: lengthArray ' />
  <div class='chart-heading' data-bind='text: $index ' />
</div>
<!-- ko if: $index() !== lengthArray -->
<div class='separator' />
  <!-- /ko -->
  <!-- /ko -->
</div>


我的两个class ='chart-heading'都按预期打印值。例如,如果lengthArray为4,则输出

4   4   4   4   4
0   1   2   3   4


但是if条件($ index()!== lengthArray)不适合最后一个索引,因此我得到了要避免的最后一个分隔符类。这是怎么了?

最佳答案

目前,我们只能猜测您的视图模型结构。

如果“ lengthArray”是可观察的,则需要解开其值:

<!-- ko if: $index() !== lengthArray() -->


要么

<!-- ko if: $index() !== ko.unwrap(lengthArray) -->


说明

将可观察对象用作计算参数时,应将其打开。假设“ lengthArray”是可观察的。这意味着“ lengthArray”是一个函数(对函数的引用)。所以写

1 + lengthArray


这是一个错误,因为要添加两个不同的对象对象:一个数字和一个函数引用。

如果编写“ lengthArray()”,则将调用“ lengthArray”函数并获取其实际值,该函数可在计算中使用:

1 + lengthArray()


如果您不知道“ lengthArray”是否是可观察的,则可以使用KnockoutJS实用程序函数:“ ko.unwrap(lengthArray)”来获取操作值。

这就是KnockoutJS对绑定参数所做的事情。这就是为什么在使用绑定时我们不需要手动进行操作。

09-25 19:47