在//=require出现之前执行javascript

在//=require出现之前执行javascript,javascript,ruby-on-rails,jquery-mobile,Javascript,Ruby On Rails,Jquery Mobile,将Rails 3.2.0与haml、sass和coffeescript结合使用: 基本上,我正在尝试禁用jQuery_Mobile,使用ajax加载页面,而不必在任何视图中包含大量javascript 我试过这个: 13 //= require jquery¬ 14 //= require jquery_ujs¬ 15 //= require_tree .¬ 16 $(document).bind("mobileinit", function() {¬ 17 $.mobile.ajaxEna

将Rails 3.2.0与haml、sass和coffeescript结合使用: 基本上,我正在尝试禁用jQuery_Mobile,使用ajax加载页面,而不必在任何视图中包含大量javascript

我试过这个:

13 //= require jquery¬
14 //= require jquery_ujs¬
15 //= require_tree .¬
16 $(document).bind("mobileinit", function() {¬
17   $.mobile.ajaxEnabled = false;¬
18 });¬
19 //= require jquery_mobile¬

没有成功,我不完全理解调用
=javascript\u include\u标记“application”
时的事件链,以及
//警告:第一个空行表示要处理的内容的结束,任何空行都应该放在下面的REQUIRES之后。
表示?

一旦运行了所有其他require指令,您在application.js清单文件中放置的任何内容都将在该文件的底部执行

您需要将此代码放入一个javascript文件(称之为
jquery\u mobile\u startup.js
)中,并在文件顶部放置一个
require'jquery\u mobile\u startup.js'

链轮尊重您在其中放置物品的顺序,并且要求树不会重新导入您已经导入的内容

要对此进行一点扩展,请执行以下操作:

application.js被读取为包含哪些文件的清单文件,并且在生产链轮/轨道中运行时,将清单中所需的所有文件合并为一个大型小型JavaScript文件,并提供给用户。 只有在开发中,
才会为您生成多个标记


所有require调用都将生成一个标记,所有常规Javascript代码都将保留在application.js中,在所有导入的文件(开发中)之后,这些代码将被导入到application.js中。

一旦运行了所有其他require指令,您在application.js清单文件中放置的任何内容都将在该文件的底部执行

您需要将此代码放入一个javascript文件(称之为
jquery\u mobile\u startup.js
)中,并在文件顶部放置一个
require'jquery\u mobile\u startup.js'

链轮尊重您在其中放置物品的顺序,并且要求树不会重新导入您已经导入的内容

要对此进行一点扩展,请执行以下操作:

application.js被读取为包含哪些文件的清单文件,并且在生产链轮/轨道中运行时,将清单中所需的所有文件合并为一个大型小型JavaScript文件,并提供给用户。 只有在开发中,
才会为您生成多个标记


所有require调用都将生成一个标记,所有常规Javascript代码将保留在application.js中,在所有导入的文件(开发中)之后导入该文件。

服务器端通过链轮(资产管道)处理
require
指令。Coffeescript/Sprocket不会执行任何Javascript。当您使用
javascript\u include\u标记“application”
时,管道将加载清单文件(application.js)并处理
require
语句来为您的javascript服务

在开发过程中,它将向您的视图添加几个
标记

对于生产,
rake assets:precompile
允许您要求Sprockets编译
应用程序hash.js
文件(hash值允许缓存/版本化您的资产),并向视图添加单个
标记

无论如何,如果您需要将Javascript代码放在清单中(坏习惯IMHO),您应该在
require
指令之后添加它

如果您需要避免加载不必要的Javascript,一种策略可以是根据用户的浏览器筛选包含的文件:创建另一个JS清单,并根据
HTTP\u user\u AGENT
头决定使用哪个清单。一个简单的例子:

  # app/helpers/user_agent_helper.rb
  def iphone?
    request.env["HTTP_USER_AGENT"] && /iPhone/=~request.env["HTTP_USER_AGENT"]
  end

  # app/viewss/layouts/application.html.erb
  ...
  <head>
    <%= javascript_include_tag iphone? ? 'iphone' : 'application' %>
  </head>

  # app/assets/javascripts/iphone.js
  //= require jquery
  //= require jquery-mobile
  //= require your-iphone-specific-js
#app/helpers/user_agent_helper.rb
苹果手机?
request.env[“HTTP\u USER\u AGENT”]&&/iPhone/=~request.env[“HTTP\u USER\u AGENT”]
结束
#app/viewss/layouts/application.html.erb
...
#app/assets/javascripts/iphone.js
//=需要jquery
//=需要jquery mobile
//=需要特定于iphone的js

服务器端通过链轮(资产管道)处理
require
指令。Coffeescript/Sprocket不会执行任何Javascript。当您使用
javascript\u include\u标记“application”
时,管道将加载清单文件(application.js)并处理
require
语句来为您的javascript服务

在开发过程中,它将向您的视图添加几个
标记

对于生产,
rake assets:precompile
允许您要求Sprockets编译
应用程序hash.js
文件(hash值允许缓存/版本化您的资产),并向视图添加单个
标记

无论如何,如果您需要将Javascript代码放在清单中(坏习惯IMHO),您应该在
require
指令之后添加它

如果您需要避免加载不必要的Javascript,一种策略可以是根据用户的浏览器筛选包含的文件:创建另一个JS清单,并根据
HTTP\u user\u AGENT
头决定使用哪个清单。一个简单的例子:

  # app/helpers/user_agent_helper.rb
  def iphone?
    request.env["HTTP_USER_AGENT"] && /iPhone/=~request.env["HTTP_USER_AGENT"]
  end

  # app/viewss/layouts/application.html.erb
  ...
  <head>
    <%= javascript_include_tag iphone? ? 'iphone' : 'application' %>
  </head>

  # app/assets/javascripts/iphone.js
  //= require jquery
  //= require jquery-mobile
  //= require your-iphone-specific-js
#app/helpers/user_agent_helper.rb
苹果手机?
request.env[“HTTP\u USER\u AGENT”]&&/iPhone/=~request.env[“HTTP\u USER\u AGENT”]
结束
#app/viewss/layouts/application.html.erb
...
#app/assets/javascripts/iphone.js
//=需要jquery
//=需要jquery mobile
//=需要特定于iphone的js