Допустим, у вас есть свойство count
в каком-то классе. Самый простой способ - сгенерировать установщик и получатель для этого свойства и внутри установщика для отправки какого-либо пользовательского события.
protected var _count:Number;
public function get count():Number
{
return _count;
}
public function set count(value:Number):void
{
_count = value;
dispatchEvent(new CountEvent(CountEvent.COUNT_CHANGED, value, true));
}
Это пользовательский класс событий:
public class CountEvent extends Event
{
public static const COUNT_CHANGED:String = "countChanged";
public var data:Object;
public function CountEvent(type:String, data:Object, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event
{
return new CountEvent(type, data, bubbles, cancelable);
}
}
Обратите внимание, что если вам нужно значение свойства и у вас нет ссылки на сам объект, вы можете создать событие объекта данных. Для того чтобы этот вид настраиваемого события работал правильно, вам необходимо переопределить метод clone, который используется каждый раз, когда событие отправляется повторно.
Если вы ищете более продвинутый способ «наблюдения» за чем-либо, используйте некоторый пользовательский код, например,
http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/observe/Observe.as?r=190
В любом случае вы должны решить, хотите ли вы изменить свой класс, добавив диспетчер (если ваш класс не является подклассом EventDispatcher ), и отправлять событие или использовать некоторые другие методы. Другой способ - сделать свойство [Bindable]
и использовать привязку между вашим свойством и некоторой функцией, чтобы наблюдать, если что-то изменится.