Knockout - 循环遍历数组并跟踪计数?

时间:2014-07-11 23:39:45

标签: knockout.js

我有一个像这样的淘汰对象,

this.results = [ 
    { name: 'aaa', display: true },
    { name: 'bbb', display: false },
    { name: 'ccc', display: true},
    { name: 'ddd', display: true},
    { name: 'eee', display: true}
];

我必须以这种表格格式填充数据,每行有两个单元格。

"名称"只有在"显示"财产是真的。由于$ index在这种情况下不起作用,我该如何实现呢?

<table>
    <tr>
        <td>aaa</td>
        <td>ccc</td>
    </tr>
    <tr>
        <td>ddd</td>
        <td>eee</td>
    </tr>
</table>

感谢。

2 个答案:

答案 0 :(得分:2)

您应该将结果配对并绑定到结果的配对视图。

如果不使用第三方库进行配对,您需要执行以下操作:

this.pairedResults = ko.dependentObservable(function () {
    var pairedResults = [], currentResult;
    ko.utils.arrayForEach(this.results(), function (result) {
        if (result.display()) {
            if (!currentResult) {
                currentResult = {
                    results: [ result ]
                };
            } else {
                currentResult.results.push(result);
                pairedResults.push(currentResult);
                currentResult = null;
            }
        }
    });
    if (currentResult) {
        pairedResults.push(currentResult);
    }
    return pairedResults;
}, this);

然后绑定到您的视图:

<table>
    <tbody data-bind="foreach: pairedResults">
        <tr data-bind="foreach: results">
            <td data-bind="text: name"></td>
        </tr>
    </tbody>
</table>

fiddle

答案 1 :(得分:0)

您的桌子与您的模型并不匹配。我将name2添加到额外列的模型中。

在这种情况下,您不需要引用索引。你要做的是在行上使用if绑定。

<table>
    <thead>
        <tr>
            <th>Name1<th>
            <th>Name2</th>
        <tr>
    </thead>
    <tbody data-bind="foreach: results">
        <tr data-bind="if: display">
            <td data-bind="text: name"><td>
            <td data-bind="text: name2"><td>
        <tr>
    </tbody>
</table>

http://jsfiddle.net/dW7ap/1/