30-07-2013, 08:56 AM
(Modification du message : 30-07-2013, 09:08 AM par Sephi-Chan.)
De mon côté c'est souvent séparé en de nombreux fichiers.
J'utilise souvent la notation déléguée de jQuery (bind, live et delegate sont maintenant fusionnée en on) car j'interviens souvent sur des éléments qui vont et viennent dans le DOM (modifié en Ajax ou autre).
Ensuite, j'utilise souvent des events personnalisés, car ça a souvent plus de sens qu'un clic (ou autre) seul. Donc mes listeners font souvent un simple travail de forwarding.
Et enfin, pour éviter d'avoir une tonne de listeners définis inutilement, il m'arrive souvent de définir des variables Javascript via le code d'une page et de définir certains listeners seulement quand certaines variables sont crées.
Et ensuite :
Comme ça, les events listeners dédiés à la map ne sont exécutés que quand c'est nécessaire. C'est l'un des maigres désavantages à utiliser des scripts packagés : ils sont compactés et compressés en peu de fichiers Javascript et on ne peut donc plus les charger seulement quand on en a besoin).
Comme j'utilise du CoffeeScript, c'est un peu plus esthétique :
Ça marche parce que CoffeeScript emballe chaque script qu'il concaténe dans une fonction anonyme, qu'on peut donc interrompre dès le début plutôt que de tout englober dans un if. CoffeeScript fournit également l'abstraction du in.
J'utilise souvent la notation déléguée de jQuery (bind, live et delegate sont maintenant fusionnée en on) car j'interviens souvent sur des éléments qui vont et viennent dans le DOM (modifié en Ajax ou autre).
$(document).on('click', '.map .territory', callback)
Ensuite, j'utilise souvent des events personnalisés, car ça a souvent plus de sens qu'un clic (ou autre) seul. Donc mes listeners font souvent un simple travail de forwarding.
$(document).on('click', '.map .territory', function(event){
var someAdditionalData = {};
$(event.target).trigger('territoryelected', someAdditionalData);
})
$(document).on('territoryelected', callback);
Et enfin, pour éviter d'avoir une tonne de listeners définis inutilement, il m'arrive souvent de définir des variables Javascript via le code d'une page et de définir certains listeners seulement quand certaines variables sont crées.
<html>
<head>
<!-- Inclusion des CSS. -->
</head>
<body>
<!-- Contenu du document. -->
window.pageRoles = [ 'map', 'playerPicker' ];
<!-- Inclusion du Javascript. -->
</body>
</html>
Et ensuite :
if(window.roles.indexOf('map') != -1){
$(document).on(...);
}
Comme ça, les events listeners dédiés à la map ne sont exécutés que quand c'est nécessaire. C'est l'un des maigres désavantages à utiliser des scripts packagés : ils sont compactés et compressés en peu de fichiers Javascript et on ne peut donc plus les charger seulement quand on en a besoin).
Comme j'utilise du CoffeeScript, c'est un peu plus esthétique :
return unless 'map' in window.roles
$(document).on(...)
Ça marche parce que CoffeeScript emballe chaque script qu'il concaténe dans une fonction anonyme, qu'on peut donc interrompre dès le début plutôt que de tout englober dans un if. CoffeeScript fournit également l'abstraction du in.