敲除 foreach 检查字段的值是否与数组中的前一个值相同
Knockout foreach check if value of field is same as previous value in array
我在Knockout中使用foreach查看数据,对于每条记录,我想检查日期字段是否与前一条记录的日期字段相同,如果是则不显示,否则显示。
理想情况下,我想要这样的布局:
12/12/2014
----------
Record 1 - Field 1 Field 2 Field 3
Record 2 - Field 1 Field 2 Field 3
14/12/2014
----------
Record 3 - Field 1 Field 2 Field 3
这是我当前的 foreach 循环,我将使用什么语法来将字段值与数组中的前一个字段值进行比较?我用谷歌搜索但没有找到任何在 Knockout foreach 循环中使用变量的例子。
<tbody data-bind="foreach: fixture.fixtures">
<tr>
<td data-bind="text: FixtureDate"></td>
<td data-bind="text: FixtureId"></td>
<td><img data-bind="attr:{src: HomeBadge}" /></td>
<td data-bind="text: HomeName"></td>
<td data-bind="text: HomeScore"></td>
<td style="width:15px;"></td>
<td><img data-bind="attr:{src: AwayBadge}" /></td>
<td data-bind="text: AwayName"></td>
<td data-bind="text: AwayScore"></td>
</tr>
</tbody>
制作一个 Computed Observable 来进行过滤,并将您的 tbody 绑定到它。任何条件都应该由您的模型控制,而不是视图。类似于:
var deduped = ko.pureComputed(function () {
var result = [];
var originalValues = fixture.fixtures();
for (var i=1; i<originalValues.length; ++i) {
if (originalValues[i].date != originalValues[i-1].date) {
result.push(orignalValues[i]);
}
}
return result;
});
实际上,您似乎想要两个嵌套的 foreach 循环:外部循环用于日期,内部循环用于 record/field 数据。编写您的 HTML 就像您的数据便于呈现一样,然后使用 Computed Observables 实现这一点。
我在Knockout中使用foreach查看数据,对于每条记录,我想检查日期字段是否与前一条记录的日期字段相同,如果是则不显示,否则显示。
理想情况下,我想要这样的布局:
12/12/2014
----------
Record 1 - Field 1 Field 2 Field 3
Record 2 - Field 1 Field 2 Field 3
14/12/2014
----------
Record 3 - Field 1 Field 2 Field 3
这是我当前的 foreach 循环,我将使用什么语法来将字段值与数组中的前一个字段值进行比较?我用谷歌搜索但没有找到任何在 Knockout foreach 循环中使用变量的例子。
<tbody data-bind="foreach: fixture.fixtures">
<tr>
<td data-bind="text: FixtureDate"></td>
<td data-bind="text: FixtureId"></td>
<td><img data-bind="attr:{src: HomeBadge}" /></td>
<td data-bind="text: HomeName"></td>
<td data-bind="text: HomeScore"></td>
<td style="width:15px;"></td>
<td><img data-bind="attr:{src: AwayBadge}" /></td>
<td data-bind="text: AwayName"></td>
<td data-bind="text: AwayScore"></td>
</tr>
</tbody>
制作一个 Computed Observable 来进行过滤,并将您的 tbody 绑定到它。任何条件都应该由您的模型控制,而不是视图。类似于:
var deduped = ko.pureComputed(function () {
var result = [];
var originalValues = fixture.fixtures();
for (var i=1; i<originalValues.length; ++i) {
if (originalValues[i].date != originalValues[i-1].date) {
result.push(orignalValues[i]);
}
}
return result;
});
实际上,您似乎想要两个嵌套的 foreach 循环:外部循环用于日期,内部循环用于 record/field 数据。编写您的 HTML 就像您的数据便于呈现一样,然后使用 Computed Observables 实现这一点。