通过重新定义父方法扩展Jquery UI中的小部件

Extending widgets in Jquery UI with redefining parent methods

本文关键字:UI Jquery 扩展 小部 方法 新定义 定义      更新时间:2023-09-26

我尝试根据文档(UI版本1.8.16)扩展UI对话框:

(function($) {
    $.widget('ui.mydialog', $.extend(true, $.ui.dialog.prototype, {
        _create: function() {
            return $.Widget.prototype._create.apply(this, arguments);
        }
    }));
})(jQuery);
$(function() {
    $('div#dialog').mydialog();
});

执行这段代码会导致JS错误:"this. JS . "uiDialog is undefined".

如果尝试重写_init()方法没有错误,但是父方法调用不起作用。

我困惑. .哪一种方式是合法的扩展,例如放一些自定义初始化代码?

我想这篇文章会解决你的问题:继承jQuery UI对话框和调用覆盖的方法。

简而言之,如果你想构建一个继承jQuery UI Dialog的小部件,你可以这样做:

(function($) {
    $.widget("ui.mydialog", $.ui.dialog, {
        _create: function() {
            $.ui.dialog.prototype._create.call(this);
        }
    });
})(jQuery);

查看实际操作:http://jsfiddle.net/william/RELxP/.


本教程将启发你:http://wiki.jqueryui.com/w/page/12138135/Widget%20factory。简而言之,$.Widget是基本小部件对象。即使它有一个_create函数,默认情况下它什么也不做,将初始化代码留给子类。看看这个更新后的例子:http://jsfiddle.net/william/RELxP/1.

从jQuery 1.9起,如果您想向小部件添加功能,而不想替换现有的函数,在完成代码之后调用父方法。要做到这一点,而不是像William Niu建议的那样,你可以简单地这样做:

_create: function()
{
    // Custom code here
    // Call the _create method of the widget
    this._super();
}

这适用于所有现有的方法。(如_setOption, _trigger等)

我发布了一个使用Widget工厂扩展jQueryUI Dialog的简单示例。

http://jsfiddle.net/Artistan/jWUGZ/

这个例子扩展了一个对话框来创建一个简单的加载模式。