2011-04-25 52 views
0

我知道這已被覆蓋了很多,但我似乎無法讓它工作。AS3來自子類的getter setter

如何從主類監聽變量的子類?

package { 

    import flash.events.* 

    public class DataBase extends MovieClip { 

     private var _OPPONENTTYPE:int = 0; 

      public function DataBase() { 
       OPPONENTTYPE(1); 
      } 
     public function get OPPONENTTYPE():int { 
      return _OPPONENTTYPE; 
     } 
     public function set OPPONENTTYPE(num:int) { 
      _OPPONENTTYPE = num; 
      dispatchEvent(new Event(DataBase._OPPONENTTYPE)); 
     } 

這是我迄今爲止的子類,但我似乎無法弄清楚如何傾聽來自主這個變量的變化(),或者即使我調度事件正常。

回答

2

假設主要有數據庫類,你可以做這樣的事情的引用:

首先,在數據庫中聲明一個公共常量來保存您的活動名稱。這比在事件代碼中使用字符串要好,因爲它允許編輯器進行錯誤檢查和自動完成。

public static const DATABASE_CHANGE:String = "onDatabaseChange"; 

現在修改您的二傳手使用這個常量:

public function set OPPONENTTYPE(num:int) { 
    _OPPONENTTYPE = num; 
    dispatchEvent(new Event(DataBase.DATABASE_CHANGE)); 
} 

在主,你需要監聽的事件(假設你已經實例化,並做了一個參考數據庫):

databaseRef.addEventListener(Database.DATABASE_CHANGE,dbChangeHandler); 

最後,在處理程序中,通過查看事件對象的目標(這將是您的數據庫類)或使用s時使用的引用來檢查OPPONENTTYPE的新值ETTING了聽衆:

private function dbChangeHandler(evt:Event):void 
{ 
    //both lines output the same 
    trace(evt.target.OPPONENTTYPE); 
    trace(databaseRef.OPPONENTTYPE); 
} 
+0

這看起來不錯,有一個問題我嘗試在此之前,我可以保留公共類數據庫擴展影片剪輯?還是必須將其更改爲擴展eventDispatcher? – 2011-04-25 09:12:38

+0

如果數據庫不是一個組件並用於分派事件,那麼它應該是eventDispatcher,能夠分派自定義事件 – Imran 2011-04-25 09:18:01

+0

獲取此錯誤:第63行1119:通過具有靜態類型DataBase的引用訪問可能未定義的屬性DATABASE_CHANGE。這是受影響的行:'dbControl.addEventListener(dbControl.DATABASE_CHANGE,dbChangeHandler);' 和我正在實例化數據庫,就像這樣...'public var dbControl:DataBase = new DataBase();' – 2011-04-25 09:23:59

1

這樣做的一個好方法是可變變化

package { 
    import flash.events.Event; 
     public class VariableEvent extends Event{ 
      public var variableName:object; 
      public var oldValue:object; 
      public var newValue:object; 
      static public var VALUE_CHANGE:String = "VALUE_CHANGE"; 

      public function VariableEvent(variableName:String, oldValue:object, newValue:object, bubbles:Boolean = false, cancelable:Boolean = false){ 
      super(VALUE_CHANGE, bubbles,cancelable); 

      this.variableName = variableName; 
      this.oldValue = oldValue; 
      this.newValue = newValue; 
     } 
    } 

} 

添加事件處理函數/偵聽器在主類中創建自定義事件類型包含的 mydispatcher作爲參考

mydispatcher.addEventListener(VariableEvent.VALUE_CHANGE, variableChangedListener); 

和MAIN類中的Handler函數將是

private function variableChangedListener(event:VariableEvent):void 
    { 
     Alert.show(event.variableName +"Changed From "+event.oldValue+" To "+event.newValue); 
    } 

dispatch事件就像是從mydispatcher

dispatchEvent(new VariableEvent("variableName",<old Value>, <changed/new Value>)); 

的希望變量值變化,有助於