2012-01-02 77 views
1

目前,我有一大堆html + php文件,每个文件都带有$(document).ready函数。Javascript和jquery命名空间

我相信要走的路是将尽可能多的JS整理到单个文件中,而且我需要命名空间函数。

所以,如果我有一个名为product_edit一个PHP文件,然后我会做类似如下:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     productActions.documentReady(); 
    }); 
</script> 

然后在我的单site_scripts文件,我可以做这样的事情:

var productActions = { 
    documentReady: function() { 
     $('#date').change(function() { 
      someGlobalFunction(); 
      productActions.getTerms(); 
     }); 

     $('#product_id').change(function() { 
      productActions.getTerms(); 
     }); 
    }, 

    getTerms: function() { 
     //do something here 
    } 
}; 

首先:我是否以正确的方式解决这个问题?这种整体方法论是否正确?或者它是无稽之谈?

其次:似乎我的site_scripts文件被缓存,所以我必须清除我的浏览器缓存每次我做任何更改。有没有快速解决这个问题?

+1

但你可以1)直接将函数传递给'.ready',2)为你的缓存问题,只需追加例如'?v2'添加到JavaScript文件的URL中,以诱使浏览器重新访问它。 – pimvdb 2012-01-02 23:52:24

回答

1

无需包装在一个额外的功能(如评论者说的)

$(document).ready(productActions.documentReady) 

有很多不同的方式来处理缓存。例如您可能想要在文件保存时加上一个时间戳(我们在构建脚本中自动执行此操作),然后应用far-futures expires headers,因此只能下载一次。

另外,对于你的命名空间,在全部大写中都有一个全局命名空间是很常见的做法。我在i.TV工作,我们做这样的事情:

window.ITV = {pages:{}} 
ITV.pages.tvListings = { 
    init: function() { } // basic init for page 
    prop1: "bla bla bla" 
} 

,然后我们可以做一些花式和你的PHP做这样的事情,这是完全在您的所有网页的可重复使用:

var pageName = "<?= $pageName ?>"; 
if (ITV.pages[pageName]) $(document).ready(ITV.pages[pageName].init); 
0

为您开发第二个问题的用户web开发人员工具栏并在开发时禁用缓存。如果你想每次客户端打开页面时都更新javascript文件,只需要在js文件中添加html时执行下面的操作: