【问题标题】:jQuery Plugins and the Rails 3 Asset Pipeline -- What am i doing wrong?jQuery 插件和 Rails 3 资产管道——我做错了什么?
【发布时间】:2011-09-24 20:07:43
【问题描述】:

我正在 Rails 3.1 中开发一个 Web 应用程序,完全(我认为)利用 css、图像和 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 似乎是正确的,除了错误;也就是说,我所期望的一切都在那里。

我做错了什么?我很乐意提供任何必要的额外信息。

【问题讨论】:

  • 在 'jquery.jscrollpane.min' 行缺少一个要求?
  • 抱歉(很遗憾!)只是一个错字,将编辑。
  • 看到它显示正常,这将有助于大约 1%,但请检查您的 application.rb 是否有一些看起来有点不对劲的东西,例如 config.assets.enabled = false

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


【解决方案1】:

如果您不经常使用资产管道,一个问题是如果您将资产预编译并转储到public/assets/application.js,那么预编译文件可能会破坏由开发资产生成的文件管道,因此您包含在 /app/assets/application.js 中的插件将被覆盖。

换句话说,你在这里用这个 sn-p 精心构建的前一个,全是唱歌,全是跳舞的 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 对象的已编译代码覆盖。

嗯,这就是我的问题,当我正在调试的页面表现出与这个非常相似的行为时。

【讨论】:

  • 谢谢,这让我卡了一天。
  • 天哪,花了这么多时间试图找出问题所在。很简单。谢谢
【解决方案2】:

在 Javascript 上工作的压缩器可能对插件的编码风格很挑剔。

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

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

【讨论】:

  • 说的不错,我试试看有没有什么办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多