2011-12-29 30 views
10

Tôi đã có một cấu trúc như thế này:Tôi có thể applyBindings cho nhiều hơn một phần tử DOM bằng Knockout không?

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

... và tôi cần để có thể ko.applyBindings-col1col3. Ngay bây giờ, tôi đang làm một cái gì đó như thế này để liên kết với col1:

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

Điều đó làm việc tốt để điền cột đầu tiên. Nhưng tôi vẫn thiếu cột thứ ba. Tôi rất muốn có thể làm điều này:

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

Và sau đó ...

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

... để nó cố gắng liên kết với tất cả các trường của .bindable. Có điều gì như thế này trong loại trực tiếp hay bạn có bất cứ đề nghị nào không?

Trả lời

16

Dưới đây là giải pháp tốt nhất mà tôi đã tìm thấy:

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

Và sau đó kịch bản gắn kết ...

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

này làm việc cho tôi và nó đẹp và sạch sẽ.

+1

Chỉ có vấn đề với điều này là mọi mã trong mô hình chế độ xem sẽ được gọi cho từng thành phần có lớp có thể kết buộc. – rball

+2

Hm .. đã không làm việc cho tôi nhưng điều này đã làm '$ (". Bindable "). Mỗi (function() { ko.applyBindings (model1, $ (this) .get (0)) })' – joelhoro

+4

with ko 2.3 Bây giờ tôi nhận được lỗi "Bạn không thể áp dụng các ràng buộc nhiều lần cho cùng một yếu tố." – ZiglioUK

1

Nhìn từ góc độ khác, bạn chỉ có 1 kiểu xem. Vì vậy, tại sao không quấn toàn bộ các div (col1, col2, vv) với một div và ràng buộc viewmodel của bạn với nó?

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

Vâng, đây thực sự là những gì tôi đang làm những ngày này, đặc biệt là sau khi chuyển sang DurandalJS. –

+1

nó sẽ không làm cho vấn đề nếu bạn có ràng buộc dữ liệu từ một mô hình xem khác trong col2? –

Các vấn đề liên quan