我使用the widget factory pattern创建了一个小的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
,它确实存在。任何帮助将不胜感激。
答案 0 :(得分:0)
您是否在开发环境中包含任何其他jQuery UI小部件但未在生产中包含,就好像您在尝试定义$.ui.mytest
之前没有使用UI命名空间的任何其他小部件那样它会发生错误,因为{ {1}}将无法定义。只有在调用$.ui
后才会定义命名空间。
将对象直接传递给$.widget
作为第二个参数会更有意义,因为您基本上试图将最终成为构造函数名称空间的小部件原型存储起来。 e.g:
$.widget()
以上将自动创建一个如下所示的构造函数:
$.widget('ui.mytest', {
_create: function () {
alert('tesst');
}
});
但是你不太可能像这样直接实例化它,因为widget工厂还定义了一个jQuery插件,它是上面的包装。