Jquery 敲除js中的addDisposeCallback()如何工作

Jquery 敲除js中的addDisposeCallback()如何工作,jquery,knockout.js,Jquery,Knockout.js,首先看一个小的自定义绑定代码 ko.bindingHandlers.dialog = { init: function(element, valueAccessor, allBindingsAccessor) { var options = ko.utils.unwrapObservable(valueAccessor()) || {}; var dialog; alert($(element).attr('id')); /

首先看一个小的自定义绑定代码

ko.bindingHandlers.dialog = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        var options = ko.utils.unwrapObservable(valueAccessor()) || {};
        var dialog;
        alert($(element).attr('id'));
        //do in a setTimeout, so the applyBindings doesn't bind twice from element being copied and moved to bottom
        setTimeout(function() {
            var dlgOptions = { 
                autoOpen: true, 
                close: function(event, ui){
                    $(this).remove();
                }
            };            
            $.extend(dlgOptions, options);

            dialog = $(element).clone().dialog(dlgOptions);
        }, 0);

        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            $(element).dialog("destroy");
            dialog.remove();
        });
    }
};
代码取自此url

下面这一行是关于什么的

ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
    $(element).dialog("destroy");
    dialog.remove();
});
什么是
domandedisposal和addDisposeCallback

何时调用addDisposeCallback()

addDisposeCallback()和复选框取消选中事件之间的关系是什么? 如果有任何关系,那么告诉我它是如何建立的

此行正在执行的操作
$.extend(dlgOptions,options)


此行正在执行的操作
dialog=$(元素).clone().dialog(dlgOptions)

domNodeDisposal
addDisposeCallback
都在淘汰文档中解释:knockoutjs.com/documentation/custom-bindings-dispose.html

它们允许您连接到敲除处理程序,以添加自己的清理代码。在您的示例中,是销毁jQueryUI对话框


用于显示对话框的模板使用绑定到复选框的可观察元素的
ko if
虚拟元素包装。当可观测值为true时,将呈现模板。如果为false,则会将其删除。通过调用
addDisposeCallback
,您将添加自己的额外清理代码,以便在knockout删除元素(dialog)时执行,这将在删除之前清理dialog元素(摆脱事件处理程序)?代码中的关系是如何建立的尚不清楚。任何人都可以帮助我理解。thankscan u plzz提供了一些示例代码,可以非常轻松地解释addDisposeCallback()的用法。您使用的示例代码是一个很好的示例,我链接到您的页面上的代码也是一个很好的示例。