3

2つの配列を持つビューモデルがあります。一方の配列を反復処理して、もう一方の配列の同じインデックスの値にアクセスしたいのですが、で使用できないよう$parentです$indexここを参照してください:

function viewModel(factors,models) {
    this.name="parent View model";
    this.factors = ko.observableArray(factors);   
    this.models = ko.observableArray(models);
}

function subViewModel(name, array) {
    this.anotherArray = ko.observableArray(array);
    this.name = name;
}

ko.applyBindings(new viewModel(
    ["factor1","factor2"],
    [ new subViewModel("model1", ["foo","bar"]), 
    new subViewModel("model2", ["one","two"])
]));

<div data-bind="text:name"></div><hr/>
<div data-bind="foreach:models">
    <div data-bind="text: $parent.factors()[$index]"></div>
    <div data-bind="text:name"></div>
    <hr/>
</div>

に変更$parent.factors()[$index]すると、配列$parent.factors()[0]から正しいエントリが表示されます。factorsだけに置き換えると$index、適切なインデックスが得られます。しかし、それらを組み合わせると、ノックアウトは$indexすでに持っている式で解析できないよう$parentです。

他の誰かがこれを見ましたか?

配列を組み合わせて、プロパティを組み合わせたビューモデルの単一の配列にすることができることはわかっていますが、そうしない理由があります。これは、はるかに複雑なビューモデルの一部です。

4

1 に答える 1

3

$indexそれ自体が観察可能です。

ドキュメントから:

これは、foreachバインディングによってレンダリングされている現在の配列エントリのゼロベースのインデックスです。他のバインディングコンテキストプロパティとは異なり、$indexは監視可能です...

したがって$index()、式の中でそれを使用している場合は、次のように記述する必要があります。

<div data-bind="text: $parent.factors()[$index()]"></div>

デモJSFiddle。

于 2013-03-19T19:53:37.510 に答える