【问题标题】:call a function using namespace使用命名空间调用函数
【发布时间】:2014-09-27 05:27:47
【问题描述】:

我已经定义了一个这样的JQfactory插件

(function($, window, document) {
    $.jqfactory('my.tooltip', {

      /* My tooltip code */         

    }, false);
}(jQuery, window, document));

现在假设我的页面中也包含了 Bootstrap 框架,并且我只想调用我的 tooltip() 版本,而不是 bootstrap 版本。如何使用命名空间$.my.tooltip

【问题讨论】:

  • 可以使用Jquery的noConflict()函数
  • @KarthikGanesan jQuery noConflict 并没有解决这个问题,因为它只区分了不同的 jQuery 版本。 tooltip 函数不是原始 jQuery 代码的一部分,所以使用 jQuery noConflict 没有意义,除非你想加载 2 个不同的 jQuery 版本并使用 2 个不同的 jQuery 对象“$”和“$$” .这肯定会在以后引起很多问题,因为开发人员将有一个意大利面条代码
  • @CJRamki 您提供的解决方案仅在 jQuery UI 和 Bootstrap 之间存在冲突时才有效,因为该解决方案基于作为 jQuery UI 一部分的 jQuery Widget Bridge (api.jqueryui.com/jQuery.widget.bridge)

标签: jquery


【解决方案1】:

如 Bootstrap 网站所述:

http://getbootstrap.com/javascript/#js-noconflict

// return $.fn.tooltip to previously assigned value
var bootstrapTooltip = $.fn.tooltip.noConflict();

// give $().bootstrapBtn the Bootstrap functionality
$.fn.bootstrapTooltip = bootstrapTooltip;

您可以使用$.bootstrapTooltip 来调用引导工具提示(如果您想使用它)。您可以将$.tooltip 用于其他用途。

jQuery noConflict 并没有解决这个问题,因为它只是区分了不同的 jQuery 版本。 tooltip 函数不是原始 jQuery 代码的一部分,因此使用 jQuery noConflict 没有意义,除非你想加载 2 个不同的 jQuery 版本并使用 2 个不同的 jQuery 对象“$”和“$$”例如。这肯定会在以后引起很多问题,因为开发人员将有一个意大利面条代码。

【讨论】:

    【解决方案2】:

    你可以像这样使用$.widget.bridge

    $.widget.bridge( "my_tooltip", $.my.tooltip );
    $('#myTooltip').my_tooltip({});
    

    或者这样做

    $.my.tooltip(null, $('#myTooltip2'));
    

    查看更多详情here

    【讨论】:

    • $.widget.bridge 是 jQuery UI 的一部分。 OP提到他正在使用Bootstrap和jQuery,但他没有提到任何与jQuery UI相关的东西。
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2012-10-13
    • 2016-01-10
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多