我有一個動作中的對象,它有幾個屬性,每個屬性都被定義爲可綁定的,並有它自己的更改事件。我想傾聽對該對象所做的任何更改,而不必爲其所有屬性添加偵聽器。在動作中有沒有一種方法可以用來偵聽對象值的任何變化?聽動作腳本中的對象的值的任何變化
感謝, -A
我有一個動作中的對象,它有幾個屬性,每個屬性都被定義爲可綁定的,並有它自己的更改事件。我想傾聽對該對象所做的任何更改,而不必爲其所有屬性添加偵聽器。在動作中有沒有一種方法可以用來偵聽對象值的任何變化?聽動作腳本中的對象的值的任何變化
感謝, -A
您可以在[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);
}
的一種方法是調用每個二傳手的objectChanged()函數。
public function set property1(arg) : void{
property1 = arg;
objectChanged();
}
編輯:你可以做類實現IPropertyChangeNotifier
我不認爲有是聽來聽事件,而無需添加監聽的方式。但是,沒有理由不能使用相同的偵聽器函數來更改事件。添加事件偵聽器應該是比較瑣碎:
myObject.addEventListener( 'property1Changed',myChangeHandler) myObject.addEventListener( 'property2Changed',myChangeHandler)
等等等等。
除了特定於屬性的更改事件之外,您還可以讓每個屬性觸發通用更改事件。雖然乏味,但這應該是一個快速剪切和粘貼的工作。
當然,但由於該對象有超過30個屬性,我想避免這種情況發生,如果可能的話。謝謝 – 2010-06-04 21:43:37