knockout.js 如何强制视图刷新而不从可观察对象自动触发?

kninwzqo  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(192)

**注意:**这主要是为了调试和理解KnockoutJS。

是否有一种方法可以显式请求Knockout从(已绑定的)视图模型刷新视图?我正在寻找类似以下的内容:

ko.refreshView();

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

bfrts1fy

bfrts1fy1#

你不能在整个viewModel上调用一些东西,但是在单个观察对象上你可以调用myObservable.valueHasMutated()来通知订阅者他们应该重新求值。

ars1skjm

ars1skjm2#

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

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
d6kp6zgx

d6kp6zgx3#

我在这里创建了一个带有bindHTML敲除绑定处理程序的JSFiddle:https://jsfiddle.net/glaivier/9859uq8t/
首先,将绑定处理程序保存到它自己的(或公共的)文件中,并在Knockout之后包含。
如果使用此开关,则将绑定切换到:

<div data-bind="bindHTML: htmlValue"></div>

OR

<!-- ko bindHTML: htmlValue --><!-- /ko -->
u1ehiz5o

u1ehiz5o4#

一个简单的替代方法是清除可观察数组:

let tmp = myObservableArray();
myObservableArray([]);
myObservableArray(tmp);

注意:此替代方案可能会影响性能。

相关问题