javascript – 我可以获取当前由knockout绑定的元素列表吗?

请考虑以下示例:

ko.applyBindings(viewModel, document.getElementById('id'));

有没有办法通过使用knockout获取“应用绑定?”列表?我问,因为我遇到了可怕的情况:

Uncaught Error: You cannot apply bindings multiple times to the same element.

现在很明显错误意味着什么.无论我们如何做事,我们通过ajax加载页面视图并使用$(id).html(数据)用所述视图填充页面,然后在使用require js加载视图然后应用绑定.

现在这个工作,直到我们导航到另一个小部件,根据我们的工作方式,它应该替换页面上的当前视图和视图模型(绑定).这是我得到错误的地方.

那么在尝试将视图模型绑定到元素时,有没有办法在Knockout中查看当前的“应用绑定”列表?

最佳答案 有一个单独元素的方法:ko.contextFor.它可以像这样使用:

console.log(ko.contextFor(document.getElementById("a")));
console.log(ko.contextFor(document.getElementById("b")));
ko.applyBindings({}, document.getElementById("a"));
console.log(ko.contextFor(document.getElementById("a"))); // Only this shows data
console.log(ko.contextFor(document.getElementById("b")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script>

<div id="a"></div>
<div id="b"></div>

为了获得所有DOM节点,你必须自己迭代/遍历节点,但这不应该很难.

另外:不要忘记Knockout是开源的,并且有一个未公开的版本.您可以在抛出错误时捕获错误,并检查该上下文发生了什么:

《javascript – 我可以获取当前由knockout绑定的元素列表吗?》

点赞