Jquery ui jQueryUI:如何使用名称空间调用小部件函数

Jquery ui jQueryUI:如何使用名称空间调用小部件函数,jquery-ui,Jquery Ui,我创建了两个具有相同名称但具有不同名称空间的自定义JQuery UI小部件,如下所示: 第一个小部件: $.widget('finance.dialog',{....}); // this was created in the file jquery.finance.dialog.js 第二个小部件: $.widget('hr.dialog',{.....}); // this was created in the file jquery.hr.dialog.js 除了这两个,jQueryU

我创建了两个具有相同名称但具有不同名称空间的自定义JQuery UI小部件,如下所示: 第一个小部件:

$.widget('finance.dialog',{....}); // this was created in the file jquery.finance.dialog.js
第二个小部件:

$.widget('hr.dialog',{.....}); // this was created in the file jquery.hr.dialog.js
除了这两个,jQueryUI在名称空间UI中有自己的对话框小部件(UI.dialog)

我的问题是: 当我在如下所示的网页中调用以下内容时,将调用哪个对话框小部件

$('div#something').dialog(); 
请注意,我在网页中包含了所有这三个小部件变体


我理解上述情况中存在冲突。我们如何使用名称空间调用小部件函数以避免冲突?

我有同样的问题,但我认为不可能使用名称空间调用jquery ui小部件

如果我对此理解正确: 通过定义具有相同名称的小部件,可以通过设计覆盖早期的定义。因为不管名称空间如何,小部件都会用名称映射到$.fn

正如bug通知单中所建议的,您可以使用bridge函数创建到特定名称空间小部件的唯一映射,并使用唯一名称调用它

在您的情况下,它可以是这样的:

$.widget.bridge( "finance_dialog", $.finance.dialog );
$.widget.bridge( "hr_dialog", $.hr.dialog );

// then call it with...
$( "div#something" ).hr_dialog(); 
$.ui.dialog(null, $('div#something'));  // Default jQ UI dialog
$.finance.dialog(null, $('div#something'));  // Your first custom dialog
$.hr.dialog(null, $('div#something'));  // Your second custom dialog

我想另一种方法是首先创建唯一的小部件名称

您可以通过其名称空间调用jQuery UI小部件,如下所示:

$.widget.bridge( "finance_dialog", $.finance.dialog );
$.widget.bridge( "hr_dialog", $.hr.dialog );

// then call it with...
$( "div#something" ).hr_dialog(); 
$.ui.dialog(null, $('div#something'));  // Default jQ UI dialog
$.finance.dialog(null, $('div#something'));  // Your first custom dialog
$.hr.dialog(null, $('div#something'));  // Your second custom dialog

使用第一个参数(在上面的示例中为null)向小部件发送任何选项。

我认为这两个函数在这种情况下会有所帮助。第一个方法是通过指向JQ在名称空间对象上创建的函数来加载小部件。第二种是直接使用名称,我认为只要名称是唯一的,就不会有冲突

/**
*在具有给定选择器的元素上应用jQueryUI小部件
*@param{String}emSelector选择器
*@param{String}名称空间小部件名称空间
*@param{String}widgetName小部件名称
*@param{Object}[options]选项对象或null
*/
jqUIWidgetByNSAndName:函数(emSelector、命名空间、widgetName、选项){
var em=$(emSelector);
$[namespace][widgetName]。调用(em,options,em);
},
/**
*在具有给定选择器的元素上应用jQueryUI小部件
*@param{String}emSelector选择器
*@param{String}widgetName小部件名称
*@param{Object}[options]选项对象或null
*/
jqUIWidgetByName:函数(emSelector、widgetName、options){
var em=$(emSelector);
$.fn[widgetName]。调用(em,选项);
}
//示例1-具有名称空间
这个.jqUIWidgetByNSAndName(“#abc”,“cg”,“WebsiteGlass”,选项);
//示例2-不带命名空间

这个.jqUIWidgetByName(“#abc”,“WebsiteGlass”,选项)此方法存在问题。初始化插件后,您不能调用方法。如果您尝试,您将收到一条消息,提示在初始化之前,
无法在对话框上调用方法。我认为这是因为当小部件以这种方式初始化时,
bridge
方法没有被调用。