jQuery UI - 覆盖插件方法

Bad*_*sie 4 jquery jquery-ui jquery-ui-dialog

我在jQuery UI中无法掌握OOP,关于我习惯的经典OOP.

据我所知,我创建了一个名为'modal'的新插件(widget),它扩展了UI对话框小部件.现在我如何覆盖对话框的close()方法,还调用原始方法,以便我不会失去其功能?

$.widget('ui.modal', $.ui.dialog, {

    close: function() {

        // How do I do something to the current modal DOM object?
        // Is this correct?
        $(this).addClass('test');

        // Then call the parent close() method to keep all original
        // functionality of dialog.close()
        // ???

    }
});

$.extend($.ui.modal);
Run Code Online (Sandbox Code Playgroud)

gis*_*rad 7

当你有一个可以挂钩的关闭事件时,为什么要用新的关闭函数覆盖$ .ui.dialog?查看以下链接中的"事件"选项卡:

http://jqueryui.com/demos/dialog/#modal

页面中的代码示例:

提供一个回调函数来处理close事件作为init选项.

$( ".selector" ).dialog({
   close: function(event, ui) { ... }
});
Run Code Online (Sandbox Code Playgroud)

通过类型绑定到close事件:dialogclose.

$( ".selector" ).bind( "dialogclose", function(event, ui) {
  ...
});
Run Code Online (Sandbox Code Playgroud)

编辑

回答这个问题:

(function($){
    var dialogExtensions ={
        oldClose: $.ui.dialog.prototype.close,
        close: function(event){
            this.oldClose(event);
            // custom code
        } 
    };
    $.extend($.ui.dialog.prototype, dialogExtensions);
})(jQuery);
Run Code Online (Sandbox Code Playgroud)