2011-03-17 28 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

相关问题