Прослушайте любое изменение значений объекта в Actionscript - PullRequest
1 голос
/ 05 июня 2010

У меня есть объект в ActionScript, который имеет несколько десятков свойств, каждое из которых определено как привязываемое и имеет свое собственное событие изменения.Я хотел бы слушать любые изменения, внесенные в этот объект, без необходимости добавления слушателя ко всем его свойствам.Есть ли способ в ActionScript, с помощью которого я могу прослушать любое изменение значений объекта?

Спасибо, -A

Ответы [ 3 ]

6 голосов
/ 06 июня 2010

Вы можете использовать PropertyChangeEvent в классе [Bindable] для прослушивания любых изменений свойства. Пока вы используете свойства 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);
        }
1 голос
/ 05 июня 2010

Я не думаю, что есть способ прослушать событие, не добавляя слушателя. Тем не менее, нет причины, по которой вы не можете использовать одну и ту же функцию прослушивателя для любого изменения события. Добавление прослушивателей событий должно быть относительно тривиальным:

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

и т.д ... и т.д ..

Кроме того, каждое свойство может вызывать событие общего изменения в дополнение к событию изменения конкретного свойства. Хотя это утомительно, это должно быть быстро вырезать и вставить.

0 голосов
/ 05 июня 2010

Одним из способов может быть вызов функции objectChanged () для каждого сеттера.

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

Редактировать: Вы можете заставить класс реализовать IPropertyChangeNotifier

...