2013-01-20 51 views
0

我使用the widget factory pattern创建了一个小型jQuery小部件。它在本地工作正常,但将代码推送到Heroku时,它不再工作。自定义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

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

如果您将基本上试图存储将成为构造函数名称空间下的小部件原型的东西存放在第二个参数中,那么将该对象直接传递给$.widget()会更有意义。例如:

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

以上会自动创建一个构造函数,看起来像这样:

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

但它不太可能你会初始化它直接像,由于部件的工厂还定义了一个jQuery插件,是上面的一个包装。