考虑以下示例:
ko.applyBindings(viewModel, document.getElementById('id'));
有没有办法通过使用knockout来获取"应用绑定列表?"我问,因为我遇到了可怕的情况:
Uncaught Error: You cannot apply bindings multiple times to the same element.
现在很明显错误意味着什么。无论我们如何做事,我们通过ajax加载页面视图并使用$(id).html(data)
用所述视图填充页面,然后在使用require js加载视图然后应用绑定。 / p>
现在这样可行,直到我们导航到另一个小部件,根据我们的工作方式,它应该替换页面上的当前视图和视图模型(绑定)。这是我收到错误的地方。
那么有没有办法看到当前的"应用绑定列表"在Knockout中,它试图将视图模型绑定到元素?
答案 0 :(得分:1)
有一个单独元素的方法: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>
&#13;
要为所有 DOM节点获取它,我必须自己迭代/遍历节点,但这不应该很难。
另外:不要忘记Knockout是开源的,并且有一个未公开的版本。您可以在抛出错误时捕获错误,并检查该上下文中发生了什么: