扩展jQueryUI小部件而不会发生冲突

时间:2011-10-08 13:57:16

标签: jquery jquery-ui jquery-plugins

我对扩展jqueryUI的对话框小部件的行为感兴趣。在过去,我已经覆盖了这样的功能:

//Custom dragging
$.ui.dialog.prototype._makeDraggable = function () {}

但我认为我应该改用使用widget工具来创建一个新的小部件,而不是从对话框继承。

我相信代码应该是这样的:

(function($, undefined) {
  $.widget('cs.dialog', $.ui.dialog, {
    // definition of the widget goes here
  });
}(jQuery));

我的问题是,即使我的对话框小部件位于cs命名空间中且jquery位于ui名称空间中,这会导致冲突吗?我相信jquery将小部件方法附加到$ .fn所以我认为它会。

如果是这样,如果您仍然遇到冲突,命名空间的目的是什么?我是否需要将我的小部件命名为“cs.csDialog”以保持其独特性?我觉得我对此有所了解。

感谢您的帮助或澄清。

1 个答案:

答案 0 :(得分:2)

$.widget()在内部调用$.widget.bridge()以将小部件方法添加到$对象:

$.widget.bridge(name, $[namespace][name]);

如您所见,它只传递小部件的名称和创建功能。命名空间仅用于访问创建函数,而不是方法名称的一部分。

因此,在您的情况下,调用您的小部件dialog确实会取代$.dialog()。但是,原始的$.dialog()方法仍然可以$.ui.dialog()方式使用,同样地,您的$.cs.dialog()方法仍可用{{1}}。