敲除 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 实现这一点。