2010-05-10 4 views
1

J'ai une application web avec des onglets pour les messages et les contacts (pensez gmail). Chaque onglet a un écouteur d'événement Y.on ('click') qui récupère un fragment HTML via Y.io() et restitue le fragment via node.setContent(). Toutefois, l'onglet Contact requiert également contact.js pour activer un bouton Modifier dans le fragment. Comment différer le coût de chargement de contact.js jusqu'à ce que l'utilisateur clique sur l'onglet Contacts? Comment contact.js doit-il ajouter son écouteur au bouton Modifier?Comment scripts de chargement paresseux dans YUI qui accompagnent les fragments html ajax

La fonction Complete de mon événement On ('click') peut sérialiser Get.script ('contact.js') après Y.io ('fragment'). Cependant, pour de meilleures performances, je préférerais télécharger le script en parallèle au téléchargement du fragment HTML. Dans ce cas, je devrais reporter l'ajout d'un écouteur d'événement au bouton Modifier jusqu'à ce que le bouton Modifier soit disponible.

Cela ressemble à un modèle de conception RIA commun. Quelle est la meilleure façon de mettre en œuvre cela avec YUI? Comment devrais-je obtenir le script? Comment devrais-je reporter des sections du script jusqu'à ce que les éléments du fragment soient disponibles dans le DOM?

+0

Dav Glass, un ingénieur YUI, a répondu sur le YUI Forum http://yuilibrary.com/forum/viewtopic.php?f=18&t=3598&p=12393#p12393 –

Répondre

0

Caridy Dispatcher module peut également gérer cela, et est probablement ma solution préférée à ce problème atm. Il était juste couvert dans YUI Heures d'ouverture aujourd'hui & il semble très bien.

+0

il semble prometteur. Je suis curieux de savoir comment il gère les noeuds de script. j'espère que ça n'appelle pas eval –

+0

@Chris Beck - ce n'est pas le cas, vous pouvez voir la source ici: http://github.com/caridy/yui3-gallery/blob/master/src/gallery-dispatcher/js /gallery-dispatcher.js Il crée un DocumentFragment et injecte le balisage, puis extrait les balises de script. Lorsque le balisage est inséré, il récupère toutes les balises de script à distance ou enfonce les balises de script en ligne dans la tête. – Tivac

+0

brillant. ça fait exactement ce que je voulais faire. il purge même tous les écouteurs existants dans le fragment qu'il remplace. nous savons qu'il est bon de séparer JS du HTML, mais avoir un seul nœud JS en ligne dans un fragment HTML est une séparation sans le coût d'une requête HTTP supplémentaire. vous m'avez sauvé un jour ou plus en essayant d'écrire moi-même –

0

Selon Dav:

« Ce que je voudrais faire est dans le rappel IO pour le fragment HTML, juste après avoir appelé setContent, utilisez Y.Get pour charger le fichier script: »

C'est tout à fait raisonnable.