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 的正常用例,正确的答案是使用 observables,但在这种情况下,我更喜欢别的东西。

4

0 回答 0