5

我遇到嵌套的 div 不会与 VM 绑定。有什么想法吗?我正在尝试以下方法,但它打破了任何想法?

<div id="div1">
   <div id="div2">

   </div>
</div>

如果我尝试这很好用:

<div id="div1">
</div>

<div id="div2">
</div>

Javascript:

ko.applyBindings(vm1, document.getElementById('div1'));
ko.applyBindings(vm2, document.getElementById('div2'));

有任何想法吗?

4

1 回答 1

5

当您绑定div1时,它将绑定所有内容,包括div2. 当你绑定div2它会再次绑定元素。这不是一个好的情况,因为元素将附加多个事件处理程序。否则,其中一个 applyBindings 可能会出错,因为元素不希望绑定到不同的视图模型。

这里的文章列出了一种保护内部元素不受外部调用绑定的方法:http ://www.knockmeout.net/2012/05/quick-tip-skip-binding.html

另一种选择是使用单一视图模型,如:

var viewModel = {
  vm1: vm1,
  vm2: vm2
};

ko.applyBindings(viewModel);

然后,像这样绑定:

<div id="div1" data-bind="with: vm1">
   <div id="div2" data-bind="with: $root.vm2">

   </div>
</div>
于 2013-01-11T04:03:53.080 回答