2010-04-10 8 views
6

Je développe une application utilisant Asp.net mvc et jquery. Je voudrais utiliser la même convention de nommage (classes et ids) pour les éléments html dans différentes vues. Dans le cas où je veux charger une vue partielle de manière asynchrone, le morceau de code $ (document) .ready() dans la vue principale perd son utilité car aucune des balises html de la vue patiale et du nommage css n'est reconnue par jquery . Je ne veux certainement pas écrire le même code pour chaque vue. Quelle est la meilleure façon de résoudre ce problème?

+0

J'ai ajouté une solution qui fonctionne pour les événements, dans la plupart des cas, exécutez-vous également des plugins, etc ... Si oui pouvez-vous en savoir un peu plus sur ce que vous devez exécuter sur le contenu chargé dynamiquement? –

Répondre

9

Vous pouvez utiliser .live() pour cela, par exemple:

$(".myClass").click(function() { }); 

Devient ceci:

$(".myClass").live('click', function() { }); 

.live() fonctionne d'une manière différente. .click() lie aux éléments le sélecteur correspondant lorsqu'il a exécuté, généralement document.ready. .live() fonctionne en vivant à la racine du DOM, en écoutant les événements à bulles et en exécutant le gestionnaire si l'événement correspondant à la cible de la bulle correspond au sélecteur.

+1

cela fonctionne pour les clics !!! Qu'en est-il des plugins que les éléments des différentes vues partielles utilisent? Par exemple, le plugin jquery dataTable() doit fonctionner pour tous les éléments qui ont une classe = "grid" quelle que soit la vue d'où ils viennent – xantrus

+0

Si je comprends bien votre question, ce n'est pas un problème. Vous pouvez utiliser $ (". Grid"). Live ([eventname], function() {}) ... dans le document prêt à "lier" à n'importe quel événement dans une vue partielle que vous utilisez. –

+0

@ user252160 - Comment chargez-vous ces '$ .ajax'? –

0

Personnellement, il suffit de charger tout le contenu en utilisant mes propres enveloppes autour de $ .post, et d'initialiser le contenu au besoin. Cela permet également d'unifier les erreurs de gestion, les notifications d'attente, etc.

Les bibliothèques tierces fournissent généralement également un moyen de prétraiter le contenu chargé par ajax. Les vues partielles n'appellent pas document.ready, mais évaluent les scripts à l'intérieur des balises de script en tête. C'est ainsi que vous pouvez forcer l'invocation de scripts spécifiques à une vue partielle.

Une autre façon que j'utilise est les balises html personnalisées sur les formulaires. Par exemple. Et mon gestionnaire $ .post vérifiera cette balise et appellera cette fonction en passant l'instance du formulaire. Cela permet de réduire la portée du script lors du chargement partiel (utile lorsque plusieurs instances de partiel peuvent être chargées sur la même page).

Questions connexes