0

我使用小部件工厂模式创建了一个小的 jQuery 小部件。它在本地工作得很好,但是当将代码推送到 Heroku 时,它就不再工作了。

如果我创建一个如下所示的小型测试应用程序:

(function ($, undefined) {
$.ui.mytest = {
  _create: function () {
      alert('test');
  },
  destroy: function () {
      // if using jQuery UI 1.8.x
      $.Widget.prototype.destroy.call(this);
      // if using jQuery UI 1.9.x
      //this._destroy();
  },
  options:{}
};
$.widget("ui.mytest", $.ui.mytest);


})(jQuery);

它将在本地打印警报,但在生产中,当资产编译完成时,我收到以下错误:

Uncaught TypeError: Cannot read property 'length' of undefined application-2ecb4e7c4dcb5be5c5d9884cdb6c266c.js:14
Uncaught TypeError: Object [object Object] has no method 'mytest' 

奇怪的是,我在生产中可以调用$.ui.mytest我的控制台并且它确实存在。任何帮助将不胜感激。

4

1 回答 1

0

您是否在开发环境中包含任何其他 jQuery UI 小部件但未在生产环境中包含任何其他小部件,就像您在尝试定义之前没有使用 UI 命名空间的任何其他小部件一样,$.ui.mytest那么它将出错,因为$.ui不会被定义。命名空间仅在您调用$.widget.

将该对象作为第二个参数直接传递给您会更有意义,$.widget()因为您基本上是在尝试将成为小部件原型的内容存储在最终将成为构造函数名称空间的内容下。例如:

$.widget('ui.mytest', {
    _create: function () {
        alert('tesst');   
    }
});

上面将自动创建一个构造函数,如下所示:

new $.ui.mytest(options, element);

但是您不太可能像那样直接实例化它,因为小部件工厂还定义了一个 jQuery 插件,它是上述内容的包装器。

于 2013-02-03T02:36:32.407 回答