2016-04-27 96 views
4

请看下面的例子:我可以获得目前由淘汰赛限制的元素列表吗?

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

是否有通过利用基因敲除的获取列表某种方式“应用绑定?”我问,因为我有一种情况,我得到了可怕的:

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

现在它很明显的错误意味着什么。我们如何做事,我们通过ajax加载一个视图到页面,并使用$(id).html(data)来填充页面上的视图,然后使用require js加载视图,然后应用绑定。

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

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

回答

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>

为了得到它所有 DOM节点,你不得不重复/遍历自己我觉得节点,但不应该是硬。

另外:不要忘记,Knockout是开源的,并有一个unminified版本可用。你可以捕捉错误发生,并检查该情况发生了什么:

debug session demo