2008-09-18 5 views
3

J'ai utilisé les composants YUI et je veux commencer à utiliser l'utilitaire Loader pour spécifier mes dépendances sur ma page. D'après votre expérience, YUI Loader Utility est-il un moyen fiable de charger les dépendances Javascript dans les pages Web?L'utilitaire YUI Loader est-il fiable?

Répondre

8

Oui, YUI Loader est fiable sur tous les navigateurs de classe A. Pour une liste des navigateurs Yahoo! considère A-grade, consultez le Graded Browser Support Chart.

2

Généralement oui. Rien ne devrait aller mal, et assurément si c'était le cas, yahoo serait sur le problème en un rien de temps!

1

J'utilise beaucoup le chargeur. C'est un excellent moyen de gérer les dépendances et de construire votre bibliothèque.

J'ai couru en 3 problèmes avec elle:

  1. Debugging - il est difficile de débogage. Est-ce le bogue dans la définition du chargeur du module ou est-ce dans le module (fichier de script)?
  2. Vous devez ajouter votre propre fonction 'subscibeOnce' pour ajouter des gestionnaires 'sur module (s) chargés'. Cela désinscrit vos gestionnaires après que le module a été chargé/inséré dans la page. Sinon, si vous insérez plus de modules plus tard dans la durée de vie de la page, ils s'appellent à chaque fois.
  3. Il y a une limite à quelles dépendances il peut comprendre. La commande dans les conditions requises: [] (dans la définition du module) semble avoir de l'importance. Je l'ai vu échouer à essayer de travailler à travers cette liste.

Ce que j'utilise est quelque chose comme:

var TheBase = function(oConfig){ 
var thisBase = this; 
var EVENTS = { 
    ON_SCRIPTS_LOADED : "onScriptsLoaded" 
    , ON_SCRIPTS_PROGRESS : "onScriptsProgress" 
} 
for(var eventName in EVENTS){ 
    thisBase.createEvent(EVENTS[eventName]);  
} 
var _loader = new YAHOO.util.YUILoader({ 
    base: oConfig.yuiBasePath 
    ,onSuccess:function(o){ 
     thisBase.fireEvent(EVENTS.ON_SCRIPTS_LOADED); 
    } 
    ,onProgress:function(o){ 
     thisBase.fireEvent(EVENTS.ON_SCRIPTS_PROGRESS,o.name); 
    } 
}) 
//optional 
    thisBase.loader = _loader; 

}

TheBase.prototype = { 
subscribeOnce : function(eventName, fnc, context, args){ 
    var that = this; 
    var handler = function hander(){ 
     fnc.apply(context, arguments); 
     that.unsubscribe(eventName, handler); 
    } 
    this.subscribe(eventName, handler, args, false); 
} 

}

// augmenter avec le fournisseur d'événements

YAHOO.lang.augment(TheBase, YAHOO.util.EventProvider);