javascript - knockout JS : foreach that increments by 2

标签 javascript knockout.js

在 Knockout JS 中,是否可以执行一个以 2 为增量的 foreach?类似于:

for (var i = 0; i < array.length; i += 2) {
    // Do stuff
}

我想这样做的原因是因为我需要循环的数据是一个数组而不是一个对象。示例:

viewModel = function () {
    this.facets = ["Sample", 100, "Sample 2", 200];
}

但是数据需要这样显示:

<ul data-bind="foreach: facets"> <!-- Can this foreach be incremented by 2? -->
    <li>$data[$index]: $data[$index + 1]</li>
</ul>

如有任何帮助,我们将不胜感激。

最佳答案

您可以为此编写一个自定义绑定(bind)处理程序,但我宁愿让模板远离这些难看的细节。

我建议写一个 ko.computed :

function Model() {
    this.data = ko.observableArray(["Sample", 100, "Sample 2", 200])
    this.items = ko.computed(function() {
        var value = [];
        var data = this.data();
        for (var i=0; i<data.length; i+=2) {
            value.push({ key: data[i], value: data[i+1]);
        }
        return value;
    }, this);
}

var model = new Model();

现在您可以遍历模板中的 items 并访问 keyvalue。更新原始 data 数组将自动重建 items 计算可观察值。

模板代码如下:

<ul data-bind="foreach: items">
    <li><span data-bind="text: key"></span>: <span data-bind="text: value"></span></li>
</ul>

关于javascript - knockout JS : foreach that increments by 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14569174/

相关文章:

javascript - Extjs显示/隐藏的正确方法

javascript - 如何比较 Javascript 中的字符串和符号?

javascript - 如何使用 knockout 保留页面之间的值?

javascript - 使用knockout.js设置表行id属性

javascript - 使用 jQuery 的 ajax 调用速度慢得令人痛苦

javascript - [Vue 警告] : Property or method is not defined on the instance but referenced during render

javascript - 如何使用c# asp.net上传默认文件

javascript - KnockoutJS - 打印 html 片段

javascript - 省略 Order to create "average"Google Chart API 中的一些行

javascript - 在 select with knockout 中更改事件