1

私はオブジェクトのコレクションを持っています。コレクションのサイズが変更されたときにビューを更新したいので、コレクションは observableArray です。

ほとんどの場合定数であり、オブザーバブルのオーバーヘッドと醜い構文が必要ないため、コレクションアイテムのフィールドをオブザーバブルにしたくありません。

しかし、リスト内のすべての要素の値を更新する必要がある非常にまれな操作があります。

この場合、パフォーマンスが低下しても問題ありません (数秒) が、リスト全体を "再バインド" してバインディングを更新する方法がわかりません。

リストで valueHasMutated を使用してみましたが、目的の効果がありません。私は自分の問題を単純化してフィドルを作成しました。

class Item
    constructor: (value) ->
        @value = value

class ItemsList
    constructor: () ->
        @items  = ko.observableArray (new Item(1) for number in [1..10])

    rareOperation: () =>
        item.value = item.value + 1 for item in @items()
        @items.valueHasMutated()

ko.applyBindings( new ItemsList() )

http://jsfiddle.net/EXkWg/2/

これが Knockout の通常のユースケースではないことはわかっています。正しい答えはオブザーバブルを使用することですが、この場合は他の方法を好みます。

4

0 に答える 0