为什么可以'我的jQuery.Widgets命名空间无法访问

Why can't my jQuery.Widgets namespace be accessed?

本文关键字:命名空间 Widgets 访问 jQuery 我的 为什么      更新时间:2023-09-26

我已经读了很多关于为我的插件使用jQuery.Widget Factory的优点的文章。其中一个功能是jQuery.widget如何为您的小部件创建名称和平。这很有吸引力,因为我可以(自然地)在jQuery上下文中保持当前的名称空间。

问题:
我不断收到"$(".myWidget").namespace.newWay不是函数"错误。

对于以下元素

<div class="myWidget"></div>

此示例代码有效:
虽然很好。。。这不是我想要达到的。。。因为我仍然希望我的命名空间得到尊重。

var workingVersion = {
            _init: function () { /* Do Something*/ }
        };
$.widget("ui.workingVersion", workingVersion);
$(document).ready(function () {
     $('.myWidget').workingVersion();
});

但是,我的代码失败:

var namespace = namespace || { };
;namespace.newWay = (function ($, window, document, undefined) {
     return function (options) {
          var self = this;
          this._create = function () {
               // Do something
          },
          this._init = function() {
               // Do something
          },
          this.publicFunction = function () {
               // Do something
          };
     };
})(jQuery, window, document);
$(document).ready(function () {
     $.widget("ui.namespace.newWay", namespace.newWay); //<-- Namespace does get appended
     $('.myWidget').namespace.newWay({ type: 'testing' }); //<-- But still fails here
});

我的问题是:
为什么会失败?

相关阅读:

  • 了解jQuery UI小部件:教程
  • 开发jQuery UI 1.8小工具的提示

这个答案可能来得有点晚,但我也在为同样的事情而挣扎,不得不读一些书。

$()在一般情况下

$()实例是分布在不同命名空间上的不同函数的无命名空间快捷方式列表。您可以通过以下方式向快捷方式列表添加更多功能:

$.fn.myFunction = function() {
    ...
};

然后将通过调用访问

$("...").myFunction(); 

如果添加两个同名函数,后一个函数将覆盖第一个函数。

小工具

当你创建一个有名称空间的小部件时,正如你所期望的,它是用它的名称空间创建的,但对于$(),它是在没有名称空间的情况下添加的,这是一个简化的带快捷方式的真实小部件的快捷方式。这是使用$.widget.bridge()完成的。因此,您可以通过如下方式创建到$()的同名链接:

$.widget.bridge("namespace_myFunction", $.namespace.myFunction );

然后像这样访问您的小工具:

$("#myDiv").namespace_myFunction();

要直接将小部件与它的原始名称空间一起使用,您可以这样调用它:

$.namespace.myWidget(
  {
    option1: "",
    option2: ""
  },
  $("#div")
);

希望这能澄清一点。。。