我有一个对象集合。该集合是一个 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() )
我知道这不是 Knockout 的正常用例,正确的答案是使用 observables,但在这种情况下,我更喜欢别的东西。