2009-06-29 6 views
0

Ich habe den folgenden Code von einer anderen Frage auf SO, um den sich ändernden Wert eines Zählers zu verfolgen.AS3 - Variable ändern und Werte an den Listener übergeben

package com.my.functions 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 

    public class counterWithListener extends EventDispatcher 
    { 

     public static const VALUE_CHANGED:String = 'counter_changed'; 
     private var _counter:Number = 0; 

     public function counterWithListener() { } 

     public function set counter(value:Number):void 
     { 
      _counter = value; 
      this.dispatchEvent(new Event(counterWithListener.VALUE_CHANGED)); 

     } 

    } 

} 

Was würde ich tun, um den Wert des Zählers übergeben, bevor ich es geändert sowie der neue Wert für den Hörer so kann ich entscheiden, ob der neue Wert gültig ist.

Antwort

2

Sie ein benutzerdefiniertes Ereignis erstellen möchten:

package 
{ 
    import flash.events.Event; 

    public class CounterEvent extends Event 
    { 
     public static const VALUE_CHANGED:String = 'valueChanged'; 

     public var before:int; 
     public var after:int; 

     public function CounterEvent(type:String, before:int, after:int) 
     { 
       this.after = after; 
       this.before = before; 

       //bubbles and cancellable set to false by default 
       //this is just my preference 
       super(type, false, false); 
     } 

     override public function clone() : Event 
     { 
       return new CounterEvent(this.type, this.before, this.after); 
     } 
    } 
} 

Dies wird Ihren obigen Code ändern:

package com.my.functions 
{ 
    import CounterEvent; 
    import flash.events.EventDispatcher; 

    public class counterWithListener extends EventDispatcher 
    { 
     private var _counter:Number = 0; 

     public function counterWithListener() { } 

     public function set counter(value:Number):void 
     { 
       this.dispatchEvent(new CounterEvent(CounterEvent.VALUE_CHANGED, _counter, value)); 
       _counter = value; 
     } 

    } 

} 
+0

Dank - sieht gut aus. werde es jetzt testen. – Josh

Verwandte Themen