我有一个现有的淘汰赛 foreach ,如下所示:
<!-- ko foreach: reportFields -->
<tr>
<td><span class="hover" data-bind="text: FriendlyName, click:$parent.openField"></span></td>
<td><img src="img/cross.png" data-bind="click: $parent.removeField" class="delete" alt="Remove Field" title="Remove Field" /></td>
</tr>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)
我需要做的是进一步过滤 foreach,即我想检查每个项目的字段,看看它是否等于 1、2 或 3。我尝试简单地在 ko foreach 之后直接放置一个淘汰 if 语句,但它无法工作,除非我把它放在一些 html 代码后面,这是一个问题,因为除非它匹配,否则我不想显示任何内容。
所以我的问题是我可以用 where 语句或类似的东西以某种方式过滤 ko foreach ,或者有没有办法让 if 语句发挥作用,而无需在声明之前有 html ?
您可以将if绑定添加到tr元素:
<!-- ko foreach: reportFields -->
<tr data-bind="if: SomeField() == 1">
<td><span class="hover" data-bind="text: FriendlyName, click:$parent.openField"></span></td>
<td><img src="img/cross.png" data-bind="click: $parent.removeField" class="delete" alt="Remove Field" title="Remove Field" /></td>
</tr>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)
或者您可以创建一个computed value视图中模型来存储filtered array和使用它foreach:
self.filteredItems = ko.computed(function() {
return ko.utils.arrayFilter(self.reportFields(), function(item) {
return item.someField() == 1;
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |