0

私のViewModelには次のものがあります。

self.collaps = ko.observableArray([0,0,0,0,0,0,0]);

self.shouldShow = function(index) { return self.collaps()[index]; };

私のテストdiv:

<div data-bind="visible: shouldShow(5)">Shown!</div>

data-bindはボタンを持っていますclick: show

self.show = function() {
    // 1. Index 5 gets true after 2 clicks!!? But UI never updates!
    self.collaps()[5] = true;

    // 2. This is push-ing in true starting at index 0
    self.collaps.replace(self.collaps()[5], true);

    // 3. If I combine the two, I get the behavior I want, I think :)
    self.collaps()[5] = true;
    self.collaps.replace(self.collaps()[5], true);

};

ここで何が起きてるの?これを行う正しい方法は何ですか?

----> JSFIDDLEよろしくお願いします!<----

4

1 に答える 1

3

koドキュメントからの引用は次のとおりです。

キーポイント:observableArrayは、それらのオブジェクトの状態ではなく、配列内にあるオブジェクトを追跡します

オブジェクトをobservableArrayに配置するだけでは、そのオブジェクトのすべてのプロパティ自体を監視可能にするわけではありません。もちろん、必要に応じてこれらのプロパティを監視可能にすることもできますが、それは独立した選択です。observableArrayは、保持しているオブジェクトを追跡し、オブジェクトが追加または削除されたときにリスナーに通知します。

したがって、配列アイテムを変更する場合、値knockoutは通知されません。関数を使用valueHasMutatedして、サブスクライバーに手動で通知できます。

self.show1 = function() {
    self.test(self.test()+1);

    self.collaps()[5] = true;
    self.collaps.valueHasMutated();
};
于 2012-10-23T11:18:13.487 に答える