jQuery插件和Rails 3资产管道 - 我做错了什么?

时间:2011-09-24 20:07:44

标签: jquery ruby-on-rails ruby-on-rails-3 asset-pipeline

我正在使用Rails 3.1中的Web应用程序,完全(我认为)利用css,images和js的资产管道。当我尝试实现jQuery插件时,我遇到了一个非常一致的问题。我已经能够在一个案例中解决它,但在另一个案例中却没有,我正在试图弄清楚关键问题是什么。

基本上,我将加载一个jQuery插件,然后在我的document.ready方法中调用它,结果发现拉起网站的结果(例如,在jScrollPane插件的情况下)

 Uncaught TypeError: Object #<Object> has no method 'jScrollPane'

我收到了其他几个插件的相同错误。我认为可能是因为我的插件之前没有加载jQuery / jQuery-UI,所以它们没有被正确实例化,但似乎并非如此。必要的脚本位于app/assets/javascripts/...我的app/assets/application.js我有以下内容:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.mousewheel
//= require mwheelIntent
//= require jquery.jscrollpane.min
//= require_tree .

除了错误之外,结果application.js似乎是正确的;也就是说,我希望那里的一切都在那里。

我做错了什么?我很乐意提供所需的任何其他信息。

2 个答案:

答案 0 :(得分:3)

如果你没有经常使用资产管道,那么如果你有预先编译并转储到public/assets/application.js的资产,那么预编译文件可能会破坏文件,因为它们是由开发资产管道,因此您在/app/assets/application.js中包含的插件将被覆盖。

换句话说,你在这里用这个片段精心构建的前一个所有歌唱,全舞蹈的jquery对象:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.mousewheel
//= require mwheelIntent
//= require jquery.jscrollpane.min
//= require_tree .

public/assets/application.js中描述jQuery对象的已编译代码覆盖。

嗯,当我正在调试的页面表现出与此相似的行为时,这就是我的意思。

答案 1 :(得分:0)

使用Javascript的压缩器可能会对插件的编码风格感到挑剔。

我发现在一些情况下,如果插件缺少关闭,则找不到代码;在末尾。压缩器可以重命名下一个函数,如果它认为它在preceding块内。

尝试重新排序插件,看看是否更改了丢失的方法。这可能会让你知道失踪的地方;是的,如果这是问题。