资产管道中有条件的javascript需求

我正在努力应对资产管道。 我正在从Google CDN加载dojo,将其放入我的模板中:

= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js', :'data-dojo-config' => %Q(dojoBlankHtmlUrl:'/blank.html', baseUrl: 'assets/', modulePaths: {custom: 'javascripts/modules'}) 

如果在本地运行或者CDN关闭,我只想要回退到本地版本。 我想过这样做:

 script typeof(dojo) === "undefined" && document.write(unescape('%3Cscript src="js/libs/dojo-1.6.1.min.js"%3E%3C/script%3E')); 

但我不喜欢它,因为它在资产管道中运作。 我想在vendor vendors/assets/javascripts/dojo保留vendors/assets/javascripts/dojo 。 如何获得资产管道服务的后备。

有没有办法在资产管道中声明条件需求。 我想要的是运行一些javascript测试,并根据结果提供文件。

谢谢

我建议你使用yepnope,一个轻量级的库,用于并行加载这样的库(为了速度),它提供了运行一些其他代码来测试库是否加载的选项。 例如:

 yepnope([{ load: 'http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js', complete: function () { if (!window.jQuery) { yepnope('asset_path('you_local_copy_of_dojo') '); } } }]) 

(注意:您需要在asset_path助手周围使用erb标签)

本地dojo文件将位于assets / javascript文件夹中,但不包含在应用程序清单中。 您需要将dojo文件添加到预编译数组:

config.assets.precompile += 'your_local_file.js'

这将使它可用于asset_path帮助程序。

谢谢理查德!

我不想让yepnope加载一个库。 这将是矫枉过正的imo。 以下是我提出的解决方案,基于您的帮助(以细长编写):


1 /在vendor / assets / javascripts /中,我有我的dojo.js.

2 /在config / application.rb中:

 # Precompile these assets files config.assets.precompile += ['dojo.js'] 

3 /在模板中:

 = javascript_include_tag "http://ajax.googleapis.com/ajax/libs/dojo/#{Settings.dojoVersion}/dojo/dojo.xd.js", :'data-dojo-config' => %Q(dojoBlankHtmlUrl:'/blank.html', baseUrl: 'assets/', modulePaths: {custom: 'javascripts/modules'}) script = "typeof(dojo) === \"undefined\" && document.write(unescape('%3Cscript src=\"#{asset_path('dojo')}\"%3E%3C/script%3E'));".html_safe 

我还在Rails Google Group上发布了请求为javascript_include_tag添加两个选项:test和:local将负责所有工作。 走着瞧。

Interesting Posts