2012-12-14 25 views
0

更新我提出的代碼的jsfiddle http://jsfiddle.net/TnSV6/13/knockoutjs custombindings更新方法不叫

edit被稱爲模型被設置爲一個視圖模型,並在打開的對話框。但是,當調用saveundo時,模式會設置爲空,但對話框不會關閉。

我可以做這個工作,如果我明確地使用jquery在jqDialog處理程序,使取消鏈接和Ajax完整的事件關閉對話框,但感覺有點hackish,因爲jqDialog.update應設法打開/關閉。

這似乎是一個呼叫未開始轉發到jqDialog.update()。但我不確定那裏是被阻止的。

+0

可能有助於在jsFiddle中獲得這個進展。我會對'jqDialog'綁定的元素周圍區域感興趣。 '$ data'通常已經被解包了,所以你的'update'函數實際上並不依賴於你的observable,所以它不會被觸發。 –

+0

@RPNiemeyer查看udpate以獲取活動示例的鏈接。 –

回答

1

是的,我上面說的實際上是這個問題。你的with裏面的觀察點已經被解開了,所以你只需要處理SettingShipmentDate.workOrder的內容。自定義綁定不知道保存它的實際觀察值。

一個簡單的辦法是隻寫它喜歡:

<!-- ko with: SettingShipmentDate.workOrder --> 
<div data-bind="jqDialog: $parent.SettingShipmentDate.workOrder, dialogOptions: {close: $root.SettingShipmentDate.undo}" data-title="Set Shipment Date"> 

現在你的綁定是通過觀察的workOrder而不僅僅是它的內容,並解纏,您在綁定的update功能做就能創建依賴關係。

樣品:http://jsfiddle.net/rniemeyer/Y4JbP/

否則,你可以重構它有點到with聲明移動到div或內部。雖然,with目前正在防範價值爲空。

+0

這解決了一個問題,但引入了另一個問題。如果您第一次點擊按鈕,但第二次會打開多個對話框。我無法解釋爲什麼。整個語法也很冗長。我開始考慮如果我的方法沒有缺陷,我需要重新考慮編輯綁定。 –

+0

jQuery UI對話框將主持對話框的div移動到頁面底部,所以當Knockout重新呈現'with'區域時,它不會刪除對話框的div,因此處理代碼不會被觸發。這是一個通過關閉對話框處理這個問題的方法:http://jsfiddle.net/rniemeyer/Dj32g/ –

+0

哇,我從來沒有想過jQuery DOM操作會扭曲KO綁定。 –