0

を持っていますobservableArray

self.items= ko.observableArray([]);

以下の項目を含む

self.item = function () {
        this.number
    };

私は別のオブジェクトを持っています

self.people = ko.observableArray([]);

これは、のインスタンスをobservableArray持つpersonobj のitems observableArray

私はこれらの罰金に追加することができ、すべてが正常に機能しています。

item問題は、内のitems配列内でを編集しようとすると発生しますperson

このように商品が表示されます。

<!-- ko foreach:  items-->
    <input class="number" data-bind="value: number" />
<!-- /ko -->

変更を特定の項目に結び付ける方法はありますか?

4

1 に答える 1

1

ビュー モデルを適切にネストすると、Knockout は入力を特定のアイテムに正しくバインドします。追加の作業は必要ありません。ビュー モデルがどのように見えるかについて 100% 明確になっているわけではありませんが、動作するはずのセットアップを次に示します。

2 つのビューモデルが次のようになっているとします。

var Item = function(name, nr) {
    this.name = ko.observable(name);
    this.number = ko.observable(nr);
};

var Person = function(name) {
    this.name = ko.observable(name);
    this.items = ko.observableArray([]);
};

ルートビューモデルには、質問で言及されているように、次のようなものがobservableArrayあります。people

var vm = { people: ko.observableArray([]) }

new Personこれにより、配列にオブジェクトを追加しpeople、それらの人々に配列Item内の個々のオブジェクトを与えることができitemsます。

次のビューはinput、変更が「特定のアイテムに関連付けられている」すべての単一アイテムのフィールドを生成します。

<div data-bind='foreach: people'>
    <h3 data-bind="text: name"></h3>
    <!-- ko foreach:  items-->
      <span data-bind="text: name"></span>:
      <input class="number" data-bind="value: number" />
    <!-- /ko -->
</div>

デモについては、このフィドルを参照してください。

于 2013-08-03T19:34:17.443 に答える