2014-02-05 87 views
0

所以這是我的問題。我正在使用LazyLoad插件來加載JavaScript文件,而不會阻止頁面呈現。這是如何我使用它:使用JavaScript LazyLoad與資產預編譯

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

當我把我的代碼的Heroku我的資產獲得預編譯和他們的名字更改爲:

another_js_file-97e27736199a78287129ad86d5aa6ae1.js 這讓我的惰性加載休息。

當我不知道他們的最終名字時,我該如何LazyLoad這些文件?

回答

1

您可以隨時禁用指紋爲您的資產在你的配置文件(配置/環境/ production.rb):

config.assets.digest = false 

雖然這會影響你的文件版本所以只有當你可以在處理它使用不同的方式或者如果你真的不需要爲你的應用程序進行版本控制。

+0

嘿,首先感謝您的答案,它的工作。但不是我已經關閉了摘要,我認爲Heroku緩存了我的資產..我推新代碼,並且它似乎沒有在某些資產文件中更新。有什麼想法,爲什麼? –

+0

是的,指紋是Heroku用來避免緩存資產問題的機制。如果您想防止這種情況發生,您需要創建自己的文件版本控制方式。如果你這樣做了,你可以控制你添加到你的資產上的'指紋',然後你可以通過在請求資產時默認添加指紋來延遲加載它們。如果您需要關於此主題的進一步幫助,請查看rails文檔,因爲這不是一個簡單的問題:http://guides.rubyonrails.org/asset_pipeline.html#what-is-fingerprinting-and-why-should-i-護理問號 –

1

您不想在生產中關閉指紋識別。將其設置爲true。否則,您的資產將被緩存,並且很難更新它們。

我正在做類似於你的事情,我通過將.js文件更改爲.js.erb,並使用rails asset_path helper生成js文件的url來解決指紋問題。這樣,指紋就被合併了。

使用上面的代碼,嘗試這樣的事情:(我假設你的代碼是在一個js文件名爲foo.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的(或運行耙資產:預編譯),你應該foo.js.erb得到編譯成富-97e27736199a78287129ad86d5aa6ae1.js,這將包含的jquery.js和another_js_file.js,包括他們的指紋正確引用。

你也可能需要添加這些文件到您在環境/ production.rb中的資產列表中,或者您正在使用的任何環境:

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