Javascript 我可以使用Knockout将绑定应用于多个DOM元素吗?
我有一个这样的结构:Javascript 我可以使用Knockout将绑定应用于多个DOM元素吗?,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有一个这样的结构: <div id='col1'> ... some ko elements ... </div> <div id='col2'></div> <div id='col3'> ... some more ko elements ... </div> 这可以很好地填充第一列。但我仍然缺少第三栏。我希望能够做到这一点: <div id='col1' class='bindable'> ... so
<div id='col1'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3'> ... some more ko elements ... </div>
这可以很好地填充第一列。但我仍然缺少第三栏。我希望能够做到这一点:
<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>
。。。因此它尝试绑定到
.bindable
的所有实例。“淘汰赛”中有类似的内容吗?或者你有什么建议吗?以下是我找到的最佳解决方案:
<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>
这对我很有用,而且很干净 从另一个角度来看,您只有一个视图模型。那么,为什么不用一个div包装整个div集(col1、col2等),并将viewmodel绑定到它呢
<div id='myWrapper'>
<div id='col1'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3'> ... some more ko elements ... </div>
</div>
... 一些ko元素。。。
... 更多的ko元素。。。
唯一的问题是,视图模型中的任何代码都将为每个具有bindable class.Hm的元素调用。。对我来说不起作用,但这确实$(“.bindable”).each(function(){ko.applyBindings(model1,$(this.get(0))})
使用ko 2.3,我现在得到错误“不能对同一元素多次应用绑定”jQuery的$。每个都将其回调的this
设置为HTMLElement
而不是jQuery包装器对象。因此,行应该是ko.applyBindings(vm,this)代码>@joelhoro您正在不必要地使用$(这个)包装然后展开元素。get(0)
是的,这实际上就是我这些天在做的事情,特别是在切换到DurandalJS之后。如果您在col2中绑定了来自其他视图模型的数据,会不会产生问题?
<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>
$(".bindable").each(function(){
ko.applyBindings(myViewModel, this[0]);
}
<div id='myWrapper'>
<div id='col1'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3'> ... some more ko elements ... </div>
</div>