文章出處

在典型的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.
};

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()