L'utilità YUI Loader è affidabile?
-
01-07-2019 - |
Domanda
Sto utilizzando i componenti YUI e desidero iniziare a utilizzare l'utilità Loader per specificare le mie dipendenze sulla mia pagina.Dalla tua esperienza, l'utilità YUI Loader è un modo affidabile per caricare le dipendenze Javascript nelle pagine web?
Soluzione
Sì, YUI Loader è affidabile su tutti i browser di livello A.Per un elenco di quali browser Yahoo!considera di grado A, controlla il Grafico di supporto del browser classificato.
Altri suggerimenti
Generalmente sì.Niente dovrebbe andare storto e sicuramente, se così fosse, Yahoo risolverebbe il problema in pochissimo tempo!
Utilizzo molto il caricatore.È un ottimo modo per gestire le dipendenze e creare la tua libreria.
Ho riscontrato 3 problemi con esso:
- Debug: è difficile eseguire il debug.Il bug è nella definizione del caricatore del modulo o nel modulo (file script)?
- Devi aggiungere la tua funzione 'subscibeOnce' per aggiungere qualsiasi gestore 'sul modulo caricato'.Questo annulla l'iscrizione ai tuoi gestori dopo che il modulo è stato caricato/inserito nella pagina.Altrimenti, se inserisci più moduli più tardi nel corso della vita della pagina, verranno chiamati ogni volta.
- C'è un limite a quali dipendenze può capire.L'ordine all'interno di require:[] (nella definizione del modulo) sembra avere importanza.Ho visto fallire il tentativo di elaborare questo elenco.
Quello che uso è qualcosa del tipo:
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);
}
}
//aumentare con il fornitore di eventi
YAHOO.lang.augment(TheBase, YAHOO.util.EventProvider);