Могу ли я применитьBindings к нескольким элементам DOM с помощью Knockout?

У меня есть такая структура:

<div id='col1'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3'> ... some more ko elements ... </div>

... и мне нужно иметь возможность ko.applyBindings до col1 и col3. Прямо сейчас я делаю что-то вроде этого для привязки к col1:

ko.applyBindings(myViewModel, document.getElementById("col1"));

Это хорошо работает, чтобы заполнить первый столбец. Но мне все еще не хватает третьей колонки. Я хотел бы иметь возможность сделать это:

<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>

И затем...

ko.applyBindings(myViewModel, $(".bindable"));

... так что он пытается привязать ко всем экземплярам .bindable. Есть ли что-нибудь подобное в нокауте или у вас есть какие-то предложения?

Ответ 1

Вот лучшее решение, которое я нашел:

<div id='col1' class='bindable'> ... some ko elements ... </div>
<div id='col2'></div>
<div id='col3' class='bindable'> ... some more ko elements ... </div>

И затем script, который связывает...

$(".bindable").each(function(){
    ko.applyBindings(myViewModel, this[0]);
}

Это работает для меня, и это приятно и чисто.

Ответ 2

Рассматривая это под другим углом, у вас есть только 1 модель обзора. Так почему бы не обернуть весь набор div (col1, col2 и т.д.) С помощью div и связать с ним свою модель просмотра?

<div id='myWrapper'>
    <div id='col1'> ... some ko elements ... </div>
    <div id='col2'></div>
    <div id='col3'> ... some more ko elements ... </div>
</div>