2013-02-19 45 views
0

我讀過這裏(Ruby On Rails 3.1 - assets pipeline - assets rendered twice)嘗試過的解決方案,在Rails的重複資產的問題,但它不工作對我的情況下,它看起來像這樣:爲什麼Rails在使用yield時會重複資產?

佈局:

<!DOCTYPE html> 
<html> 
<head>...</head> 
<body> 
... 
<!-- including :application --> 
<%= javascript_include_tag :application %> 
<!-- yielding :body_script --> 
<%= yield :body_script %> 
</body> 
</html> 

然後,在 「用戶」 的觀點:

<%= content_for :body_script do %> 
    <%= javascript_include_tag 'users' %> 
<% end %> 
... 
... 
... 

我的JavaScript依賴項是:

  • 的application.js 「需要」 的jquery,引導和自我
  • users.js 「要求」 worker_interface.js
  • worker_interface.js 「需要」 的jquery,敲除和應用

當 「用戶」視圖渲染,我越來越重複的jQuery和application.js中對我的身體,每一個的端渲染,因爲javascript_include_tag :application和其他因yield :body_script,像這樣:

<!-- including :application --> 
<script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script> 
<script src="/assets/application.js?body=1" type="text/javascript"></script> 
<!-- yielding :body_script --> 
<script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
<script src="/assets/knockout.js?body=1" type="text/javascript"></script> 
<script src="/assets/application.js?body=1" type="text/javascript"></script> 
<script src="/assets/worker_interface.js?body=1" type="text/javascript"></script> 
<script src="/assets/users.js?body=1" type="text/javascript"></script> 

我知道我在這裏有多餘的依賴關係,因爲我要求不止一次(間接)包含jquery和應用程序。但是,不應該保證沒有重複的文件被渲染我是否仍然可以保持「冗餘」依賴關係,並且只能提交一次文件

順便說一句,我正在使用Rails版本3.2.9。

+0

你在application.js中使用'require_tree'嗎?人們告訴我,Rails足夠聰明,不會多次包含特定資產,但我已經看到完全相反的時間。資產管道可能是一件神祕的事情。另一件值得關注的事情是如果你有一些已經預編譯的資產。我注意到有時我的開發環境會加載非靜態和靜態資產,可能是一個配置設置。 – Noz 2013-02-19 17:04:13

+0

嘿@Cyle,我沒有在任何地方使用require_tree。我用「config.serve_static_assets = false」禁用了靜態資源的服務:( – fegemo 2013-02-19 17:27:57

+0

我假設sadface意味着它沒有工作;)。更改設置後,您是否重新啓動了服務器?如果您在本地進行測試,大多數現代瀏覽器都會緩存舊CSS。嘗試清除緩存。如果這沒有解決它,那麼我可以建議的唯一的其他事情是結算出這個SO http http:// stackoverflow中建議的空白行答案。com/questions/8558472/javascript-included-twice-in-a-rails-3-1-asset-based-app – Noz 2013-02-19 17:38:53

回答

2

不應該Rails保證沒有重複的文件被渲染?我可以 仍然保持「冗餘」依賴關係,並使文件只呈現 一次嗎?

答案很簡單:沒有

資產預編譯和生產,使 「靜態」。您可以通過多種方式包含資產。所以沒有辦法讓Rails在渲染頁面的上下文中「知道」應該刪除哪些文件。

您需要確保沒有重複。

+0

從前端開發的角度來看,這是確切的原因,即#= require並不是令人滿意的加載解決方案JS文件在任何JS應用程序中,甚至有點複雜。使用模塊加載程序。 – 2015-06-27 13:03:07

相關問題