Frage

So möchte ich eine Möglichkeit, Ereignisse einzurichten, damit ich Daten ohne die Schaffung Schließungen \ Speicherlecks passieren kann. Dies ist so weit ich habe:

package com.events {
    import flash.events.Event;

    public class CustomEvent extends Event {
        public static const REMOVED_FROM_STAGE:String = "removedFromStage";
        public var data:*;

        public function CustomEvent(type:String, customData:*=null, bubbles:Boolean=false, cancelable:Boolean=false) {
            super(type, bubbles, cancelable);
            this.data = customData;
        }

        public override function clone():Event {
            return new CustomEvent(type, data, bubbles, cancelable);
        }

        public override function toString():String {
            return formatToString("CustomEvent", "type", "data", "bubbles", "cancelable", "eventPhase");
        }
    }
}

Das wird mir folgendes Verhalten:

function testme(e:Event) {
    trace(e); 
}

test_mc.addEventListener(CustomEvent.REMOVED_FROM_STAGE, testme);
test_mc.dispatchEvent(new CustomEvent(CustomEvent.REMOVED_FROM_STAGE, 42));
//Traces [CustomEvent type="removedFromStage" data=42 bubbles=false cancelable=false eventPhase=2]
removeChild(test_mc);
//Traces [Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]

Mein Ziel ist es, die individuellen Daten, die ich aus dem Ereignisse Blitz ausgelöst geben übergeben will zu erhalten, und nicht nur die, die ich schieße. Zum Beispiel, was passiert, wenn ich einen Movieclip zusammen mit einem Loader.complete Ereignis übergeben wollte, in der sich ergebenden Bitmap setzen?

War es hilfreich?

Lösung

Sie erweiterte die Event-Klasse für sie mit zusätzlichen Daten versenden, jetzt, wenn Sie die Loader-Klasse mögen Ihren individuellen Ereignistyp versenden, die Loader-Klasse erweitern, das zu tun (oder jede andere Klasse wollen Sie dies tun mit). In diesem Beispiel werde ich mit dieser Funktion außer Kraft setzen URLLoader (weil Loader tatsächlich Ereignisse Versendungen von ihm content ist, die zwei überschriebenen Klassen benötigt, und ich möchte nur es einfach halten)


package com.net
{
    import flash.net.URLLoader;
    import flash.events.Event;

    import com.events.CustomEvent;

    public class CustomLoader extends URLLoader
    {
        // URLLoader already has a data property, so I used extraData
        public var extraData:*;

        override public function dispatchEvent(event: Event) : Boolean
        {
            var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable);
            return super.dispatchEvent(customEvent);
        }
    }
}

Jetzt zu verwenden, um dies mit Ihrer CustomEvent Klasse versuchen, diesen Code in Ihren fla


import com.net.CustomLoader;
import com.events.CustomEvent;

var loader: CustomLoader = new CustomLoader();
loader.extraData = "Extra Data";
loader.load(new URLRequest("test.xml"));
loader.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(event: CustomEvent) : void
{
    trace(event.data); // Extra Data
}

BAM! Kundenspezifische Daten auf Ihren angeboren versandt Ereignissen!

Andere Tipps

Im Folgenden ist der sauberste Weg, um ein benutzerdefiniertes Ereignis zu erstellen. Typischerweise haben Ereignistypen public static Referenzen in allen Capitol Buchstaben eingegeben. Wenn ein Ereignis ausgelöst wird, übergibt er ein Ereignis oder CustomEvent, Objekt der Methode Ereignisbehandlungsroutine. Hier können Sie Ihre übergebenen Wert abrufen können.

package com.hodgedev.events 
{
    import flash.events.Event;

    public class CustomEvent extends Event 
    {
        public static const VALUE_CHANGED:String = "VALUE_CHANGED";
        public var value:Number;

        public function CustomEvent(pValue:Number) 
        { 
            super(CustomEvent.VALUE_CHANGED);
            value = pValue;
        } 
        public override function clone():Event 
        { 
            return new CustomEvent(value);
        }
    }
}

Wenn wir Ereignisse versenden, erstellen wir eine neue Instanz der Veranstaltung als solche weitergegeben werden.

private var _someValue:int = 12;
dispatchEvent(new CustomEvent(_somevalue));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top