2012-04-23 70 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