我可以获得目前被淘汰赛绑定的元素列表吗?

时间:2016-04-27 00:29:01

标签: javascript jquery knockout.js

考虑以下示例:

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中,它试图将视图模型绑定到元素?

1 个答案:

答案 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;
&#13;
&#13;

要为所有 DOM节点获取它,我必须自己迭代/遍历节点,但这不应该很难。

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

debug session demo