资产管道中的条件javascript要求



我正在与资产管道作斗争。我正在加载dojo从谷歌CDN把这个放在我的模板:

= 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是down。我想这样做:

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

但是我不喜欢它,因为它在资产管道之外工作。我想把道场留在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帮助器周围添加动词标记)

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

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

这将使它可用于asset_path帮助器

谢谢Richard!

我不想让yepnope加载一个库。在我看来,这太过分了。以下是我想到的解决方案,基于您的帮助(用细字体写的):


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

2/In 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谷歌组上发布了请求向javascript_include_tag添加两个选项,:test和:local,这将照顾所有的工作。我们将会看到。

相关内容

  • 没有找到相关文章

最新更新