在//=require出现之前执行javascript
将Rails 3.2.0与haml、sass和coffeescript结合使用: 基本上,我正在尝试禁用jQuery_Mobile,使用ajax加载页面,而不必在任何视图中包含大量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
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