我有一组对象。该集合是一个observableArray,因为我希望在集合大小发生变化时更新我的视图。
我不想让集合项中的字段可观察,因为它们几乎总是常量,我不想要observables的开销和丑陋的语法。
但是有一种非常罕见的操作需要更新列表中所有元素的值。
我不介意在这种情况下(几秒钟)有性能损失,但我不知道如何“重新绑定”整个列表并刷新绑定。
我尝试在列表中使用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的正常用例,正确的答案是使用observable,但在这种情况下我更喜欢别的东西。