2012-01-02 79 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時執行下面的操作: