2012-09-07 57 views
7

我基本上想要在不同對象的同一頁面上重新應用綁定,但是存在奇怪的行爲。在我重新申請綁定後,項目列表丟失。在淘汰賽中重新應用綁定

請看這裏:http://jsfiddle.net/baio/9UcUs/5/

怎麼辦?

+0

這可能不會直接影響您的質疑,但更具標準的敲除方法是綁定視圖模型,然後更改模型的內容,而不是每次更改整個模型。例如,請參閱http://jsfiddle.net/9UcUs/8/。 –

+0

相關的代碼應該始終是***的問題,而不僅僅是鏈接(甚至不是jsFiddle)。 –

回答

6

簡短的回答是它不被支持。漫長的回答是有一些解決方法。一種方法是在applyBindings之前調用cleanNode,但這並不能清除事件處理程序。另一種方法是將您的視圖模型包裝在可觀察對象中,然後更新該可觀察對象以重新應用綁定;這樣做效果更好,但仍然存在一些小問題(請參見下文)。

下面是使用可觀察到的視圖模型方法的例子:http://jsfiddle.net/mbest/9UcUs/9/

我已經用觀察到的視圖模型中發現的唯一的問題是事件處理程序沒有完全與新的視圖模型進行更新。他們將在新視圖模型中調用正確的功能,但thisdata值將用於原始視圖模型。

編輯:

淘汰賽3.0(目前預定於發行這個月),完全支持可觀察的視圖模型。仍然可能存在自定義綁定的問題,但希望所有這些都將很快記錄下來。

4

您可以將相同的viewmodel綁定到不同的元素,您需要指定要應用綁定的元素。

ko.applyBindings(vm, $('#yourul')); 

ko.applyBindings(vm, $('#div')); 
+6

記住Knockout不是jQuery依賴的:使用'$('#yourul')[0]'和'$('#div')[0]'代替 –

0

這樣做:

ko.applyBindings(viewModel, $('#somejQObj')[0]); 

的作品作爲@ fengd的答覆的意見陳述。目前有一個由foreach語句填充的表,它具有可擴展的行,每個行都有一個動態添加的子表,該表也由一個foreach語句填充。在動態插入每個子表之後,執行上述操作,設置子表的綁定並填充數據。