Rails强大的资产需求

时间:2012-11-22 09:20:23

标签: ruby-on-rails ruby-on-rails-3 assets

这里是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

2 个答案:

答案 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" %>

就是这样!