2010-06-04 49 views
1

我有一個動作中的對象,它有幾個屬性,每個屬性都被定義爲可綁定的,並有它自己的更改事件。我想傾聽對該對象所做的任何更改,而不必爲其所有屬性添加偵聽器。在動作中有沒有一種方法可以用來偵聽對象值的任何變化?聽動作腳本中的對象的值的任何變化

感謝, -A

回答

6

您可以在[Bindable]類上使用PropertyChangeEvent來偵聽任何屬性更改。只要你使用get/set屬性。

package 
{ 

    [Bindable] 
    public class Person 
    { 
     private var _firstName:String; 
     private var _lastName:String; 
     private var _age:Number; 

     public function get firstName():String 
     { 
      return _firstName; 
     } 

     public function set firstName(value:String):void 
     { 
      _firstName = value; 
     } 

     public function get lastName():String 
     { 
      return _lastName; 
     } 

     public function set lastName(value:String):void 
     { 
      _lastName = value; 
     } 

     public function get age():Number 
     { 
      return _age; 
     } 

     public function set age(value:Number):void 
     { 
      age = value; 
     } 

     public function Person() 
     { 
      // empty constructor 
     } 

    } 
} 

然後,在您的使用類中添加事件偵聽器。

 public var p:Person; 

     private function addListener():void 
     { 
      p = new Person(); 
      p.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange); 
     } 

     private function onPropertyChange(event:PropertyChangeEvent):void 
     { 
      trace(event.property + " " + event.kind + " " + event.oldValue + " " + event.newValue); 
     } 
0

的一種方法是調用每個二傳手的objectChanged()函數。

public function set property1(arg) : void{ 
    property1 = arg; 
    objectChanged(); 
} 

編輯:你可以做類實現IPropertyChangeNotifier

+0

當然,但由於該對象有超過30個屬性,我想避免這種情況發生,如果可能的話。謝謝 – 2010-06-04 21:43:37

1

我不認爲有是聽來聽事件,而無需添加監聽的方式。但是,沒有理由不能使用相同的偵聽器函數來更改事件。添加事件偵聽器應該是比較瑣碎:

myObject.addEventListener( 'property1Changed',myChangeHandler) myObject.addEventListener( 'property2Changed',myChangeHandler)

等等等等。

除了特定於屬性的更改事件之外,您還可以讓每個屬性觸發通用更改事件。雖然乏味,但這應該是一個快速剪切和粘貼的工作。