收听Actionscript中Object对象的任何更改

时间:2010-06-04 21:29:54

标签: actionscript-3 flex flex3

我在actionscript中有一个Object,它有几十个属性,每个属性都被定义为可绑定并且有自己的change事件。我想听取对该对象所做的任何更改,而无需为其所有属性添加侦听器。在actionscript中是否有一种方法可以用来监听对象值的任何变化?

谢谢, -A

3 个答案:

答案 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