我可以使用Knockout将绑定应用于多个DOM元素吗?

Byr*_*ahl 11 html javascript knockout.js

我有这样的结构:

<div id='col1'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3'> ... some more ko elements ... </div>
Run Code Online (Sandbox Code Playgroud)

......我需要能够ko.applyBindingscol1col3.现在,我正在做这样的事情来绑定到col1:

ko.applyBindings(myViewModel, document.getElementById("col1"));
Run Code Online (Sandbox Code Playgroud)

这适用于填充第一列.但我仍缺乏第三栏.我很想能够做到这一点:

<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>
Run Code Online (Sandbox Code Playgroud)

然后...

ko.applyBindings(myViewModel, $(".bindable"));
Run Code Online (Sandbox Code Playgroud)

...所以它试图绑定到所有的实例.bindable.在淘汰赛中有这样的东西,或者你有什么建议吗?

Byr*_*ahl 18

这是我发现的最佳解决方案:

<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>
Run Code Online (Sandbox Code Playgroud)

然后绑定的脚本......

$(".bindable").each(function(){
    ko.applyBindings(myViewModel, this[0]);
}
Run Code Online (Sandbox Code Playgroud)

这适合我,它很好,干净.

  • 用ko 2.3我现在得到错误"你不能多次将绑定应用于同一个元素." (4认同)
  • jQuery的`$ .each`将其回调的`this`设置为`HTMLElement`而不是jQuery包装器对象.所以该行应该是`ko.applyBindings(vm,this);`.@joelhoro你不必要地包装然后用`$(this).get(0)展开元素 (4认同)
  • 嗯..对我来说不起作用,但这确实是`$(".bindable").each(function(){ko.applyBindings(model1,$(this).get(0))})` (2认同)