通过重新定义父方法扩展Jquery UI中的小部件
Extending widgets in Jquery UI with redefining parent methods
我尝试根据文档(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/这个例子扩展了一个对话框来创建一个简单的加载模式。
相关文章:
- jQuery UI自动完成突然停止工作
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 停止jQuery UI滑块移动超过给定值
- Jquery UI自动完成无法工作
- jquery ui滑块上的滑块值
- jQuery UI可排序-多连接列表拖动
- 使用Jquery ui时滑块无法工作
- JQuery UI可拖动潜水与滚动棒到鼠标
- jQuery UI自动完成-修改问题
- JQuery UI日期选择器:在选择出发日期时自动弹出返回日期
- 阻止选项卡缓存jquery ui
- 将jQuery UI Timepicker Addon与React一起使用
- 如何在页面重新加载时显示jquery ui对话框
- jquery ui自动完成导致标头错误
- jquery UI draggable:UI.children不是一个函数
- 在JQuery UI Accordion Sortable中使用touchpunch无法正确使用touch
- Jquery UI对话框不会消失
- 无限循环onsen UI + jquery
- Ignite UI - (jQuery) - 无法使用 ig.excel.WorksheetCellComment 在单
- 可排序的UI jquery的奇怪行为