文章出處
文章列表
在典型的Knockout應用程序中,DOM元素是動態添加和刪除的,例如使用模板綁定或通過控制流綁定(if,ifnot,with和foreach)。 當創建自定義綁定時,通常需要添加清除邏輯,當Knockout刪除與您的自定義綁定相關聯的元素時,該邏輯運行。
在處理元素時注冊回調
要注冊要刪除節點時要運行的函數,可以調用ko.utils.domNodeDisposal.addDisposeCallback(node,callback)。 例如,假設您創建自定義綁定以實例化窗口小部件。 當具有綁定的元素被刪除時,您可能想要調用窗口小部件的destroy方法:
ko.bindingHandlers.myWidget = { init: function(element, valueAccessor) { var options = ko.unwrap(valueAccessor()), $el = $(element); $el.myWidget(options); ko.utils.domNodeDisposal.addDisposeCallback(element, function() { // This will be called when the element is removed by Knockout or // if some other part of your code calls ko.removeNode(element) $el.myWidget("destroy"); }); } };
覆蓋外部數據的清理
當刪除一個元素時,Knockout運行邏輯來清理與該元素相關的任何數據。 作為這個邏輯的一部分,如果jQuery在頁面中加載,Knockout調用jQuery的cleanData方法。 在高級方案中,您可能希望阻止或自定義在應用程序中如何刪除此數據。 Knockout公開了一個函數,ko.utils.domNodeDisposal.cleanExternalData(node),可以重寫以支持自定義邏輯。 例如,為了防止調用cleanData,可以使用空函數來替換標準的cleanExternalData實現:
ko.utils.domNodeDisposal.cleanExternalData = function () { // Do nothing. Now any jQuery data associated with elements will // not be cleaned up when the elements are removed from the DOM. };
文章列表
全站熱搜