He dado con la solución a un problema que me llevaba de cabeza desde hace tiempo, los fallos de carga del componente Loader y del Scrollpane una vez subidos a la web
He leído que mucha gente, al igual que yo, les dan problemas una vez colgada la web, problemas como no hacer el scroll, o el escalado, o salirse del espacio del componente...
He investigado, probado, y reprobado, y he encontrado esta explicación y solución al problema:
Los amigos de bgxcomponents.com publican en su web, que el problema del Loader viene dado porque el indicador de progreso de carga, se queda en _totalBytes -1 hasta completar el último frame, cuando el componente chequea el progreso de carga y aparece en total-1 por 3 veces, lo da por terminado y empieza la reproducción. Por tanto, como no está completo y no tiene las medidas totales, no hace bien el escalado.
Y esto ocurre, cuando tenemos una conexión lenta a internet, por ejemplo con un módem USB de GSM o 3G.
También aportan la solución, la única que funciona de todas las que he probado.
La solución, es hacer una pequeña modificación al código del componente, para que haga la comprobación más de 3 veces, yo he probado varias opciones, y con 5000 veces, carga bien hasta con un modem de 14.400
El código a añadir sería el siguiente: (a poner en el frame 1, antes de los load()
Código :
import mx.controls.Loader; //define the maxTries here. var maxTries:Number = 5000; Loader.prototype.checkLoadProgress = function():Void { var i:String; for (i in this.loadList) { var x:Object = this.loadList[i]; //trace("loading..." + loadList[i].url); x.loaded = x.obj.getBytesLoaded(); x.total = x.obj.getBytesTotal(); //trace( x.loaded +"/"+ x.total ); if (x.total > 0) { x.obj._visible = false; this.dispatchEvent({type:"progress", target:x.obj, current:x.loaded, total:x.total}); if (x.loaded == x.total) { if (this.loadedList == undefined) { this.loadedList = new Object(); } this.loadedList[i] = x; delete this.loadList[i]; this.doLater(this,"contentLoaded"); } else { //NOTE BGX: also this is different than in the original code where //the call to doLater is outside the check "if (x.total > 0)" this.doLater(this,"checkLoadProgress"); } } else { if (x.total == -1) { // sometimes you get a -1 before it starts loading if (x.failedOnce != undefined) { x.failedOnce++; //NOTE BGX: the following is the line changed [orig: if (x.failedOnce > 3)] if (x.failedOnce > maxTries) { this.dispatchEvent({type:"complete", target:x.obj, current:x.loaded, total:x.total}); //trace("total == -1 loaded = " + x.loaded); delete this.loadList[i]; delete x; } } else { x.failedOnce = 0; } } //NOTE BGX: also this is different than in the original code where //the call to doLater is outside the check "if (x.total > 0)" this.doLater(this,"checkLoadProgress"); } } };
Y el problema del ScrollPane, viene a ser el mismo, y cambiando la 1a linea, hacemos el mismo proceso con este componente y también funciona, por fín!
Sería algo así:
Código :
import mx.containers.ScrollPane;
Ahora ya podemos usar y aprovechar bien estos 2 componentes sin que nuestras webs le fallen a los usuarios cuando tienen conexiones lentas.
Espero que les sirva a todos.
Carles Hernàndez
www.luccart.net
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zguillez el 04 de Junio de 2009
Por eldervaz el 05 de Junio de 2009
Pero si, es verdad, en el 2004 hice una app donde usaba el SP y claro, era con datos del Server y redibujaba elementos en el SP, con ello simplemente me hizo apreciar las profesiones de abogados y contadores (con respeto porq casi toda mi familia lo es).
Recuerdo que llegué a la solución refrescando el SP y además de eso, siempre verificando las cargas. Pero bueno igual es buen aporte
Por luccart el 05 de Junio de 2009
luccart
Por Otaku RzO el 05 de Junio de 2009
Por oskarin el 20 de Octubre de 2009
Por Rafael Rojas el 16 de Noviembre de 2009
gracias
Por luccart el 16 de Noviembre de 2009
el problema no es del ScrollPane, es del bloque de texto, lo estás escribiendo todo en un solo bloque de texto, y tiene un límite.
Tan solo debes partir el texto en varios bloques y listo.
A mi también me pasó.
PD. tienes las películas de esos scrollPane más anchos de la cuenta, como los 16 px que ocupa la barra de scroll, y te hace scroll horizontal.
También podrías mejorar, que el scroll del ScrollPane funcione con la rueda del mouse. para dejarlo perfecto
Saludos
Luccart
Por Rafael Rojas el 16 de Noviembre de 2009
Por Jimena :) el 20 de Diciembre de 2009
me sirvió muchísimo el aporte, estuve batallando mucho con el scrollpane hasta ahora
Por marcee el 20 de Diciembre de 2009
muchass gracias
Por criss el 08 de Agosto de 2011