2011-03-17 5 views
5

le plus longtemps que j'écrivais tout mon code à l'intérieur comme ça ...Est-ce une manière intelligente d'organiser le code dans jQuery?

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

    }); 
    ... 

}); 

mettre toutes sortes de gestionnaires de clic là-dedans. Mais récemment, j'ai été initié à une nouvelle façon de faire les choses et je voulais avoir une idée pour savoir si c'est une façon intelligente de s'y prendre.

l'idée est d'avoir tous les gestionnaires dans des fonctions connexes et ensuite avoir un minimum de code dans document.ready ci-dessus.

Ainsi, par exemple ...

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

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

    }); 
    ... 
} 

Cela semble permettre à l'organisation des gestionnaires dans les fonctions connexes et utiliser document.ready comme plus d'un initialiseur.

Je sais que dans les fonctions JavaScript et variables sont « hissés » avant le code commence à exécuter donc

do_something(); 
function do_something(){ 

} 

œuvres pour cette raison, puisque la fonction est prête à l'emploi avant do_something() est en fait appelé, même si elle apparaît avant la définition de la fonction réelle. Je me demandais si la même chose arrivait ici et à quel point cette idée/façon de faire est «bonne».

Répondre

5

Cela exposera tous vos gestionnaires à la portée globale (window), ce qui peut entraîner des conflits.

Je préfère le faire ...

(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

pourquoi (fonction ($) {}) (jquery) ;? et quand vous dites "affrontements" ... pouvez-vous me donner un exemple de ce que vous voulez dire? – concept47

+0

@ concept47 Je veux dire que si vous avez une fonction 'handleClick()' et que votre collègue en fait une, vous aurez un conflit. – alex

+0

okay ... J'aime bien où vous allez avec ceci, mais comment gérez-vous un cas où vous avez une tonne de gestionnaires à l'intérieur de votre (fonction ($) {}) (jQuery); appel? ...Comment les répartiriez-vous en fonctions par vous-même ... n'hésitez pas à mettre à jour votre réponse avec ça. – concept47

0

je mets toujours les fonctions avant le document prêt:

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

que j'écrire en sténographie:

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

Idéalement, il est préférable d'avoir juste un initialiseur comme ci-dessus . This peut vous être utile si vous voulez écrire des extensions/plugins dans le contexte jQuery.

+0

Une raison particulière pourquoi? Les fonctions seront hissées d'une manière ou d'une autre et en préparant le document en premier, quelqu'un regardant votre code le sait. – concept47

2

Cela dépend:

Voulez-vous réutiliser les fonctions? - Si oui, votre structure est une bonne façon de le faire

Quelle est votre code? - Si votre code n'est pas trop long et ne pas utiliser ailleurs. Je pense que vous n'avez pas besoin de le diviser en fonctions.

+1

Parfois, pour des interactions d'interface utilisateur vraiment complexes, vous pouvez obtenir de nombreux gestionnaires qui sont également longs, même si certaines fonctions ne sont pas réutilisées, cela semble être une façon plus simple d'organiser le code. – concept47

Questions connexes