我在Knockout中使用foreach来查看数据,对于每个记录,我想检查Date字段是否与上一条记录的Date字段相同,如果是,则不显示,否则显示它。
理想情况下,我想要一个像这样的布局:
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循环,我将使用什么语法将字段值与数组中的前一个字段值进行比较?我已经google了一下但没有找到任何在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>
答案 0 :(得分:1)
创建一个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循环:外部的一个用于日期,而内部一个用于记录/字段数据。写下您的HTML就好像您的数据便于呈现一样,然后使用Computed Observables来实现这一目标。