Knockout foreach检查字段的值是否与数组中的先前值相同

时间:2015-03-04 18:51:02

标签: javascript knockout.js

我在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>

1 个答案:

答案 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来实现这一目标。