资产管道中有条件的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将负责所有工作。 走着瞧。