我有一段代码试图在其中显示一些基于$ 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对绑定参数所做的事情。这就是为什么在使用绑定时我们不需要手动进行操作。