4

foreachKnockout JS では、 2 ずつインクリメントすることは可能ですか? 次のようなもの:

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>

どんな助けでも大歓迎です。

4

4 に答える 4

5

このためのカスタム バインディング ハンドラーを作成することもできますが、テンプレートにそのような醜い詳細を含めないようにしたいと思います。

を書くことをお勧めし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これで、テンプレート内の を反復処理して、keyおよびにアクセスできますvalue。元の配列を更新すると、計算されたオブザーバブルdataが自動的に再構築されます。items

テンプレート コードは次のようになります。

<ul data-bind="foreach: items">
    <li><span data-bind="text: key"></span>: <span data-bind="text: value"></span></li>
</ul>
于 2013-01-28T19:08:29.043 に答える
2

My Repeat バインディング ( https://github.com/mbest/knockout-repeat ) では、stepオプションを指定できます。

<ul>
    <li data-bind="repeat: {foreach: facets, step: 2}"
        data-repeat-bind="text: facets[$index] + ': ' + facets[$index+1]">
    </li>
</ul>
于 2013-01-28T21:10:05.460 に答える
1

これはおそらくあなたが探しているものです:

for (var i = 0; i < array.length; i += 2) {
    var sample = array[i];
    var number = array[i+1];
    var display = "<li>" + sample + ": " + number + "</li>" // display this
}

すでに持っているようですが、何が問題なのかわかりません...

于 2013-01-28T19:06:08.417 に答える
0

関数を使用して、バインドする必要がある構造を作成できます。

 self.arrayFunc = function() {
    var result = [];

    for (var i = 0, length = array.length; i += 2) {
        result.push({first: array[i], second: [i + 1]};
    }

};
于 2013-01-28T19:06:11.123 に答える