我在actionscript中有一个Object,它有几十个属性,每个属性都被定义为可绑定并且有自己的change事件。我想听取对该对象所做的任何更改,而无需为其所有属性添加侦听器。在actionscript中是否有一种方法可以用来监听对象值的任何变化?
谢谢, -A
答案 0 :(得分: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
}
}
}
然后,在您的using类中添加事件监听器。
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);
}
答案 1 :(得分:1)
我不认为有一种方法可以在不添加监听器的情况下收听事件。但是,没有理由不能使用相同的侦听器函数进行事件更改。添加事件监听器应该相对简单:
等等......等等。myObject.addEventListener( 'property1Changed',myChangeHandler) myObject.addEventListener( 'property2Changed',myChangeHandler)
除了特定于属性的更改事件之外,您还可以让每个属性触发一般更改事件。虽然乏味,但这应该是一个快速剪切和粘贴工作。
答案 2 :(得分:0)
一种方法是在每个setter上调用objectChanged()函数。
public function set property1(arg) : void{
property1 = arg;
objectChanged();
}
修改:您可以使类实现IPropertyChangeNotifier