2012-04-23 68 views
1

我有一個application.js資源和一個editor.js資源。它們都具有jquery.batchImageLoad.js庫的依賴關係。兩個不同導軌資產的單個JavaScript文件依賴關係

application.js可用於整個網站,但editor.js僅在某些頁面上可用,但它們有時會遇到。

事情是,jquery.batchImageLoad.js庫被加載兩次,這不是完全合乎需要的。

是否有任何方法來防止這些衝突,除非必須改變實際的JavaScript?

+2

如果application.js中的每一頁上,它已經擁有jQuery的一個DEP .batchImageLoad.js,那麼爲什麼editor.js需要在同一個batchImage上擁有dep? – dstarh 2012-04-23 16:50:24

+0

@dstarh在不久的將來,會有一些只有editor.js的頁面。 – 2012-04-23 20:36:17

回答

2

在application.js和editor.js這兩個頁面都有jquery.batchImageLoad.js,因爲瀏覽器會緩存它,所以用戶只下載一次就可以了。

我推薦構建你的js文件,並且包含一個沒有重疊的方式。您可以通過開溝的application.js做到這一點,有:

  • editor.js內
  • common.js
    • 包括jquery.batchImageLoad.js和其他公共庫
  • everything_else.js
    • 你在application.js中的大部分內容在
    • 之前

你會在所有地方包含common.js,然後根據需要包含editor.js或everything_else.js。

如果你不想重組,你可以寫一個include_once功能,雖然這使得你的JavaScript包括難以預料

# in application_helper 
@included_javascripts = {} 

def javascript_include_tag_once file 
    unless @included_javascripts[file] 
     javascript_include_tag file 
     @included_javascripts[file] = true 
    end 
end 
+0

但如果它運行兩次?無論如何,軌道工作的方式將使其加載2次。 – 2012-05-31 16:24:38

+1

你是什麼意思的方式鐵軌工程?對於一個jQuery擴展,運行兩次並不理想,但可能確定,因爲它會在第二次覆蓋它(應該沒有onload方法)。這是由你來構建你的包含文件只包含一次的方式。 – phillee 2012-05-31 22:03:34

+0

這是一箇舊帖子,我真的不記得爲什麼......但它肯定沒有工作 – 2012-06-01 12:02:52