【问题标题】:Extending jQueryUI widgets without conflicts扩展 jQueryUI 小部件而不会发生冲突
【发布时间】:2011-12-03 13:55:05
【问题描述】:

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

//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”以保持其唯一性?我觉得我对此的理解中缺少一些东西。

感谢您的帮助或澄清。

【问题讨论】:

    标签: jquery jquery-ui jquery-plugins


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,明白了很多,谢谢。假设我确实希望将小部件方法称为 $.cs.dialog() 将其应用于元素的语法是什么?
    • 您应该先传递小部件选项,然后传递元素,例如$.cs.dialog({autoOpen: false}, yourElement);.
    • @FrédéricHamidi 很高兴知道这一点。以及我们如何使用这种方法调用方法,即使用 $.cs.dialog。在这种情况下,语法是否也相同。即 $.cs.dialog('refresh', yourElement) 方法在哪里刷新?此外,是否有任何地方记录了 widget.bridge 的详细信息?我正在使用它,但是当我更新我的 jQuery 和 jQuery UI 时,我在这里遇到了问题。我想链接到文档可能是一个好的开始。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多