我有一個使用Knockout.js構建的Web應用程序,但是我沒有實現的一件事就是正確的可重用HTML。現在,即使我有一個視圖,如多個其他視圖共享的對話框,我也必須複製並粘貼HTML代碼並將其嵌套在父代中,以實現子代與父代之間的正確綁定通信。如何創建ViewModel事件模式
下面是一個例子:
<div class="person-view"> <!-- PersonViewModel -->
<div class="person-details">
<!-- Person details -->
</div>
<button type="button" data-bind="click: EditAddress">Edit address</button>
<div class="modal hide fade" role="dialog" data-bind="modal: ShowEditAddressModal, with: Address"> <!-- AddressViewModel -->
<div class="modal-header">
<h3>Edit address</h3>
</div>
<div class="modal-body">
<!-- Address details -->
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">Cancel</button>
<button class="btn btn-danger" data-dismiss="modal" data-bind="click: function() { $parent.SetAddress($data); }">Save</button>
</div>
</div>
</div>
在這種情況下,我有一個子視圖模型,我正在爲模態格設置爲DataContext的。當用戶單擊Save按鈕時,我正在調用父DataContext上的一個方法。
我知道如何將模態分解爲單獨的HTML模板並生成動態提供ViewModel的模板。這將工作顯示和隱藏的模式,因爲我只需要從父的代碼中執行以下操作:
this.Address().IsShown(true);
在這種情況下,模式將其知名度只是綁定到一個屬性上本身父母只需要改變它。沒關係。
但是,如何點擊保存按鈕?我沒有看到如何讓父母使用Knockout.js的MVVM模式來響應此事件。該按鈕仍然需要綁定到AddressViewModel上的任意代碼的click
綁定,但是如何使用Knockout向其父級發送事件信號?
有沒有辦法與Knockout做到這一點,我是否需要實現一個單獨的庫,如Underscore.js的事件?
您可能需要在視圖/視圖模型中使用原型,並將回調傳遞給視圖模型。這樣你可以從任何其他視圖實例化它,並讓它在關閉時回調給父節點。 –