2010-02-19 45 views
0

基本上我所追求的是,​​在將所有JavaScript壓縮到一個文件(或幾個文件)之後,我怎樣才能使document.observe(dom:loaded({...}))函數調用正確的頁面?如何在一個JavaScript文件中有多個document.observe(dom:loaded ...)函數? (原型)

所以說,我的網站有5個頁面,每個頁面都有一個單獨的JS文件。在每個文件內部都有一個頁面相關函數的加載,以及一個在DOM被加載時設置事件處理器等的特殊函數。顯然,如果所有5個頁面都包含他們自己的JS文件,那很好。但爲了版本管理和效率的原因,我想將所有的JS壓縮到一個頁面中。

因此,在這樣做時,我最終會得到5個「dom:loaded」函數等待安裝。這不會做,因爲這些函數內的東西是特定於頁面的。所以,我的問題是我怎麼做我想做的事情,而不會導致大量的DOM錯誤和錯誤的事件處理程序設置請求?

我認爲命名空間和類似的東西,但沒有真正瞭解它/他們的任何事情。

順便說一句,我使用Prototype庫。哦,我的網站比5頁大得多! :)

感謝, 李

回答

1

一些想法: 檢查DOM來識別頁面。例如,將一個屬性附加到body元素。 在設置變量的頁面中放置了一個腳本標記。 檢查網址。

當load事件觸發時,事件處理程序會識別頁面並將控件移交給正確的代碼。

+0

謝謝您花時間回答。我曾經考慮過這些想法,但已經把它們當作「黑客」。我想我只是太挑剔。我給他們一個去。謝謝 – 2010-02-19 12:21:19

1

我想給不同的ID給<body> S中的單獨的HTML文件和測試DOM的:加載事件中使用$$('body')[0].id<body>元素的名稱。

+0

非常感謝。我會在上面提及克里斯的建議。 – 2010-02-19 12:22:03

+0

@LeeRM:不客氣。 – 2010-02-19 17:29:14

0

我選擇使用php正則表達式來捕獲URI,然後將其用作身體標識。在我的網站上,頁面名稱是靜態的,這意味着每個頁面都有一個唯一的ID。

然後在HEAD中包含一個JS文件,其中包含一個開關塊,其中加載了相應的代碼/函數。開關塊位於document.observe(dom:loaded ...)函數內部。

作品一種享受!

再次感謝您的幫助。

0

我傾向於總是寫我的.js沒有自我激活(這麼多的可能)...

僞代碼

namespace('mysite.section.init'); 
mysite.section.init.pageName = function(){ 
    //stuff to run here... 
};
在您的主頁

,在底部,或通過dom:加載事件只需運行mysite.section.init.pageName();

相關問題