使用javascript LazyLoad和资产预编译

时间:2014-02-05 08:22:26

标签: javascript ruby-on-rails lazy-loading

所以这是我的问题。我正在使用LazyLoad插件来加载javascript文件,而不会阻止页面呈现。这就是我使用它的方式:

LazyLoad.js(["/assets/jquery.js","/assets/another_js_file.js"],function () {
   some javascript code;
});

当我将代码推送到heroku时,我的资产得到预编译,其名称将更改为:

another_js_file-97e27736199a78287129ad86d5aa6ae1.js 这使我的LazyLoading休息。

当我不知道他们的最终名字时,我如何懒惰加载文件?

2 个答案:

答案 0 :(得分:1)

您始终可以在配置文件中禁用资产的指纹识别(config / environments / production.rb):

config.assets.digest = false

虽然这会影响您的文件版本控制,但只有在您可以以不同的方式处理它或者您真的不需要为您的应用程序进行版本控制时才使用。

答案 1 :(得分:1)

您不想在生产中关闭指纹识别。将其设置为true。否则,您的资产将被缓存,并且很难更新它们。

我正在做类似的事情,我通过将.js文件更改为.js.erb并使用rails asset_path帮助程序生成js文件的URL来解决指纹问题。这样,指纹就会被合并。

使用上面的代码,尝试这样的事情:(我假设你的代码在一个名为foo.js的js文件中:

//rename foo.js to foo.js.erb
LazyLoad.js(["<%= asset_path 'jquery.js' %>","<%= asset_path 'another_js_file.js'%>"],function () {
   some javascript code;
});

然后,当你上传到heroku(或运行rake资产:precompile)时,你的foo.js.erb应该编译成foo-97e27736199a78287129ad86d5aa6ae1.js,它将包含对jquery.js和another_js_file.js的正确引用,包括他们的指纹。

您可能还需要将这些文件添加到environment / production.rb中的资产列表或您正在使用的任何环境中:

config.assets.precompile += %w(foo.js)