嵌套多个虚拟机使用嵌套的DIV(Nesting multiple VMs with nested D

2019-07-18 02:15发布

我遇到的是与VM嵌套DIV不会绑定。 任何想法?我想下面和它打破什么想法吗?

<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'));

有任何想法吗?

Answer 1:

当您绑定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>


文章来源: Nesting multiple VMs with nested DIVs
标签: knockout.js