Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无冲突地扩展jQueryUI小部件_Jquery_Jquery Ui_Jquery Plugins - Fatal编程技术网

无冲突地扩展jQueryUI小部件

无冲突地扩展jQueryUI小部件,jquery,jquery-ui,jquery-plugins,Jquery,Jquery Ui,Jquery Plugins,我对扩展jqueryUI的对话框小部件的行为感兴趣。在过去,我覆盖了如下函数: //Custom dragging $.ui.dialog.prototype._makeDraggable = function () {} (function($, undefined) { $.widget('cs.dialog', $.ui.dialog, { // definition of the widget goes here }); }(jQuery)); 但我认为我应该改为使用

我对扩展jqueryUI的对话框小部件的行为感兴趣。在过去,我覆盖了如下函数:

//Custom dragging
$.ui.dialog.prototype._makeDraggable = function () {}
(function($, undefined) {
  $.widget('cs.dialog', $.ui.dialog, {
    // definition of the widget goes here
  });
}(jQuery));
但我认为我应该改为使用widget工厂来创建一个新的widget,而不是从dialog继承的widget

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

//Custom dragging
$.ui.dialog.prototype._makeDraggable = function () {}
(function($, undefined) {
  $.widget('cs.dialog', $.ui.dialog, {
    // definition of the widget goes here
  });
}(jQuery));
我的问题是,即使我的对话框小部件位于cs命名空间中,而jquery位于ui命名空间中,这是否会导致冲突?我相信jquery会将小部件方法附加到$.fn,所以我认为它会

如果是这样,如果仍然存在冲突,那么名称空间的用途是什么?我是否需要将我的小部件命名为“cs.csDialog”以保持其唯一性?我觉得我对这件事的理解有点欠缺

感谢您的帮助或澄清。

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

$.widget.bridge(名称,$[namespace][name]);
如您所见,它只传递小部件的名称和创建函数。名称空间仅用于访问创建函数,不作为方法名称的一部分


因此,在您的情况下,调用您的小部件
dialog
确实会替换
$.dialog()
。但是,原始的
$.dialog()
方法将作为
$.ui.dialog()
保持可用,同样地,您的方法将始终作为
$.cs.dialog()

可用。好的,这将清除很多问题,谢谢。假设我确实希望将小部件方法称为
$.cs.dialog()
将其应用于元素的语法是什么?您应该首先传递小部件选项,然后传递元素,例如
$.cs.dialog({autoOpen:false},yourElement)@FrédéricHamidi这很高兴知道。我们如何使用这种方法调用方法,即使用$.cs.dialog。在这种情况下,语法也是一样的。i、 e.$.cs.dialog('refresh',yourElement),其中refresh是方法?另外,是否有记录widget.bridge详细信息的地方?我正在使用它,但当我更新jQuery和jQuery UI时,我在这里遇到了问题。我想链接到文档可能是一个好的开始。