Comment gérer les erreurs non organisées n ° 2044 de Flash Tilelist lors de la modification de DataProvider?

StackOverflow https://stackoverflow.com/questions/3214414

Question

J'ai un composant tiléliste à l'aide d'un rendu d'élément basé sur ImageCell personnalisé. Je sais que, parfois, certaines des images qui tentent de récupérer ne seront pas trouvées et je suis capable de gérer cela via un auditeur IEORROR sur le chargeur personnalisé ImageCell.

Toutefois, si je définis le fournisseur de données, il est modifié avant que toutes les images aient terminé leur processus de chargement ou d'erreur, le joueur de débogage Flash jette une erreur n ° 2044 non andantée dans Firefox indiquant qu'une image ne pouvait pas être trouvée. Dans l'opéra avec le joueur de débogage, il jette un # 2044 indiquant qu'une charge jamais terminée.

Je ne peux pas trouver un moyen de piéger et d'ignorer ces erreurs afin de ne pas jeter le dialogue du joueur de débogueur. En outre, lorsque vous utilisez l'IDE Builder Flash pour déboguer, le débogueur ne se casse pas sur ces erreurs - ce n'est que dans le joueur pendant que je suis capable de casser d'autres erreurs sans problème.

C'est comme si l'auditeur d'erreur est en train d'être éliminé lorsque le DataProvider change, mais le chargeur continue et jette un n ° 2044 non manqué.

Des idées sur la façon de gérer efficacement? Merci d'avance pour votre temps et votre assistance -

B

Était-ce utile?

La solution

Dans le constructeur de votre rendu de cellule personnalisé, vous devez ajouter un auditeur d'événement à l'instance Protégée Chargeur et gérer l'iOerror.

Voici un exemple:

package
{
    import fl.controls.listClasses.ICellRenderer;
    import fl.controls.listClasses.ImageCell;
    import fl.controls.TileList;
    import fl.data.DataProvider;
    import fl.managers.StyleManager;
    import flash.events.EventDispatcher;
    import flash.events.*;
    import fl.containers.UILoader;

    public class CustomImageCell extends ImageCell implements ICellRenderer
    {  

        public function CustomImageCell() 
        {
            super();

            //do other stuff here

            loader.scaleContent = false;
            loader.addEventListener(IOErrorEvent.IO_ERROR, handleErrorEvent, false, 0, true);

            useHandCursor = true;
        }

        override protected function drawLayout():void
        {
            var imagePadding:Number = getStyleValue("imagePadding") as Number;
            loader.move(11, 5);

            var w:Number = width-(imagePadding*2);
            var h:Number = height-imagePadding*2;
            if (loader.width != w && loader.height != h)
            {
                loader.setSize(w,h);
            }
            loader.drawNow(); // Force validation!

        }
        override protected function handleErrorEvent(event:IOErrorEvent):void {
            trace('ioError: ' + event);
            //dispatchEvent(event);
        }
    }
}

Voici un test simple que j'ai fait pour voir ce qui se passe lorsque le fournisseur de données est mis à jour:

import fl.controls.*;
import fl.data.DataProvider;
import fl.controls.listClasses.CellRenderer;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var tileList:TileList = new TileList ();
tileList.move(220,40);
tileList.setSize(215, 400);
tileList.columnWidth = 215;
tileList.rowHeight = 86;
tileList.direction = ScrollBarDirection.VERTICAL;
tileList.setStyle("cellRenderer", CustomImageCell);
addChild(tileList);

tileList.dataProvider = getRandomDP(10);
setTimeout(resetDP,3000);

function resetDP():void {
    tileList.dataProvider = getRandomDP(10);
}
function getRandomDP(size:int):DataProvider {
    var result:DataProvider = new DataProvider();
    for(var i:int = 0; i < size; i++)   result.addItem({label:'item'+i,source:'wrong.url/'+Math.random()});
    return result;
}

htth

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top