这里是mobile.js
//= require jquery
//= require iui
//= require faye-updater
//= require anonymous-chat
//= require anonymous-vote
//= require_self
这是我如何包含脚本
<%= content_for :head do %>
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>
<%= javascript_include_tag "mobile" %>
<% end %>
以及重新编译资产后我得到的东西:mobile .... js从
开始function launch_faye_updater....
这是来自faye-updater.js的函数,它必须包含在jquery和iui之后。由于错误的包含顺序,它不起作用。如何使Rails包含正确的资产?
UPD:这是生产模式Rails 3.2.8
答案 0 :(得分:0)
从哪里调用launch_faye_updater?
我猜你可以通过移动这一行解决这个问题:
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>
低于其他包括,如下:
<%= javascript_include_tag "mobile" %>
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>
(您可能还需要考虑创建一个包含这两个文件的新编译JS文件。)
答案 1 :(得分:0)
我的jquery,bootstrap和应用程序依赖项遇到了同样的问题。您可以在Rails 3.1+中按首选顺序交付所有JS模块。在您的示例中,您希望在mobile.js之前包含jquery.js。
首先,从您的mobile.js文件删除jquery 。
然后,您需要在 application.rb 中添加以下代码行:
config.assets.precompile += ['mobile.js', 'jquery.js', 'jquery_ujs.js']
此时您已预先编译并准备好使用所有内容。您的mobile.js不包含jquery,因此您可以按照首选顺序包含它:
<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "mobile" %>
就是这样!