2011-03-17 61 views
5

因爲我被裏面寫我的代碼是這樣的時間最長......這是一個聰明的方式來組織代碼在jQuery中?

$(document).ready(function(){ 
    $('.show_module').click(function(){ 

    }); 
    ... 

}); 

把各種點擊處理程序在那裏。但是最近我被介紹給了一種新的做事方式,我想知道它是否是一種聰明的做法。

這個想法是讓所有的處理程序在相關的函數中,然後在document.ready上面有最小的代碼。

因此,例如...

$(document).ready(function(){ 
    page_handler(); // other functions follow 
}); 

function page_handler(){ 
    $('.show_module').click(function(){ 

    }); 
    ... 
} 

這似乎讓相關處理程序的組織功能和使用的document.ready隨着越來越多的一個初始化程序。

我知道的JavaScript函數和變量「紅旗」的代碼開始執行這樣

do_something(); 
function do_something(){ 

} 

作品出於這個原因之前,由於功能準備就緒,do_something()實際上是調用前使用,即使它出現在實際功能定義之前。

我想知道在這裏是否發生了同樣的事情,以及這種想法/做事方式有多「好」。

回答

5

這會將您的所有處理程序暴露給全局(window)作用域,這可能會導致衝突。

我喜歡做這個...

(function($) { 

// Anything you do in here won't be attached to window. 
var a; 

// If you must have something global, set it explicitly 
window.doSomething = function() { ... } 

// We can also use $ for jQuery here, even if we have used jQuery.noConflict() 
$('body')... 

})(jQuery); 
+0

why(function($){})(jquery);?當你說'衝突'...你能給我一個你的意思嗎? – concept47 2011-03-17 08:43:46

+0

@ concept47我的意思是如果你有一個'handleClick()'函數並且你的同事也做了一個,你將會發生衝突。 – alex 2011-03-17 13:33:24

+0

好吧...我喜歡你要去的地方,但是你如何處理你的函數(函數($){})(jQuery)中有很多處理程序的情況;呼叫? ...你將如何將它們分解爲自己的功能......隨時更新你的答案。 – concept47 2011-03-17 18:44:58

0

我始終把功能前的文件準備:

$(document).ready(function() { ... }); 

這一點我將在短手寫:

$(function() { ... }); 

理想的情況下,最好是隻有一個像上面初始化器。 This也可能對你有用,如果你想在jQuery上下文中編寫擴展/插件。

+0

有什麼特別的原因?這些功能將首先以任何方式掛起,並且首先將文檔準備好,然後看看您的代碼的人員知道它在那裏。 – concept47 2011-03-17 09:15:55

2

這取決於:

你想重用的功能呢? - 如果是的話,你的結構是一個好辦法

你的代碼有多長? - 如果您的代碼不太長,而且沒有在其他地方使用。我認爲你不需要把它分解成功能。

+1

有時候,對於真正複雜的UI交互,你可以得到很多處理程序,這些處理程序也會很長,所以即使某些功能沒有被重用,它似乎更容易組織代碼 – concept47 2011-03-17 08:45:00

相關問題