如何强制视图刷新而不从可观察的角度自动触发?

THX*_*138 148 knockout.js

注意:这主要用于调试和理解KnockoutJS.

有没有办法明确请求Knockout从(已绑定)视图模型刷新视图?我正在寻找类似的东西:

ko.refreshView();
Run Code Online (Sandbox Code Playgroud)

我知道这不是Knockout的预期用途,但我仍然想知道是否有这样的方法用于调试和学习目的.

RP *_*yer 249

您不能在整个viewModel上调用某些内容,但在单个observable上,您可以调用myObservable.valueHasMutated()以通知订阅者他们应该重新评估.正如您所提到的,这在KO中通常是不必要的.

  • 它是否也适用于阵列?在我的情况下没有. (9认同)
  • 您还可以迭代数据上下文,搜索具有`valueHasMutated`属性的元素,该属性类型为`function`并为每个元素调用它.这应该得到你所有的可观察量,但这是不好的做法,并且可以想象得到比预期更多的更新(想想计算的依赖链). (5认同)
  • 这里的数组也不起作用.实际上阵列似乎在Knockout中根本不起作用.我想念Angular :-( (2认同)
  • 从KO 3.5起,它确实适用于KnockoutObservableArrays (2认同)

Pro*_*rod 24

在某些情况下,简单地删除绑定然后重新应用可能是有用的:

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
Run Code Online (Sandbox Code Playgroud)

  • 注意你是否也使用jQuery(例如,当将应用程序的位迁移到ko时),因为cleanNode也将删除其他dom事件. (15认同)