注意: 这主要用于调试和理解KnockoutJS。
是否有一种明确的方法可以请求Knockout从(已绑定)视图模型中刷新视图?我正在寻找像这样的东西:
ko.refreshView();
我知道这不是 Knockout 的预期用途,但我仍然想知道是否有这样一种方法用于调试和学习目的。
注意: 这主要用于调试和理解KnockoutJS。
是否有一种明确的方法可以请求Knockout从(已绑定)视图模型中刷新视图?我正在寻找像这样的东西:
ko.refreshView();
我知道这不是 Knockout 的预期用途,但我仍然想知道是否有这样一种方法用于调试和学习目的。
在整个viewModel上你不能调用某个东西,但是在单个可观察对象上,你可以调用myObservable.valueHasMutated()
来通知订阅者重新评估。一般情况下在KO中这是不必要的,就像你所提到的那样。
在某些情况下,仅仅将绑定删除然后重新应用可能会很有用:
ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
我在这里创建了一个带有bindHTML knockout绑定处理程序的JSFiddle: https://jsfiddle.net/glaivier/9859uq8t/
首先,将绑定处理程序保存到自己的(或公共的)文件中,并在Knockout之后包含。
如果您使用此功能,请将绑定切换为:
<div data-bind="bindHTML: htmlValue"></div>
OR
<!-- ko bindHTML: htmlValue --><!-- /ko -->
一种简单的替代方法是清除可观察数组:
let tmp = myObservableArray();
myObservableArray([]);
myObservableArray(tmp);
valueHasMutated
属性的元素,该属性的类型为function
,并对每个元素调用它。这应该可以获取您所有的可观察对象,但这是一种不良的实践,并且可能会触发比预期更多的更新(考虑计算依赖链)。 - Patrick MmyViewModel.valueHasMutated()
来更新整个视图。 - Roy JvalueHasMutated
在observableArray上不起作用时,可以使用“脏刷新”方法,请参见此处:https://dev59.com/ZmYs5IYBdhLWcg3wAfAi#13231783 - mft25