Гибкие часы привязываемого свойства другого класса
Я создаю приложение с помощью Flex 4. Когда приложение запускается, оно читает файл XML и заполняет объекты. Вызов.send() является асинхронным, поэтому я хотел бы прослушать / посмотреть этот заполненный объект, а когда он закончится, отправить событие для других классов, чтобы они могли его использовать.
package model{
public class LectureService extends HTTPService{
[Bindable]
private var _lecture:Lecture;
...
}
XML анализируется правильно и загружается в объектную лекцию класса Lecture.
Если я использую нотацию MXML в приложении main.mxml, она работает нормально (объект используется, когда он заполняется после асинхронного запроса):
<mx:Image id="currentSlide" source={lectureService.lecture.slides.getItemAt(0).path} />
НО, у меня есть другой класс ActionScript, и я не могу прослушать это отправленное (посредством [Bindable]) событие.
package components{
public class LectureSlideDisplay extends Image
{
public function LectureSlideDisplay()
{
super();
this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onChangeTest);
}
private function onChangeTest(e:PropertyChangeEvent):void {
trace('test');
}
Я уже попробовал:
- используя (как выше) addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, methodName).
- попытался изменить [Bindable] на [Bindalbe("nameEvent")] и прослушать это, ничего.
- используя метод CreateWatcher, не работает.
попытался взглянуть на сгенерированный код класса, но мне не помогло
if (this.hasEventListener("propertyChange")){ this.dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this, "lecture", oldValue, value)); }
Как я могу слушать и иметь заполненный объект в другом классе? Может быть, проблема в том, что я слушаю из другого класса, но в этом случае, как я могу это реализовать? Кажется, событие отправлено, но я не могу его слушать.
3 ответа
Для тех, кто хочет получить ответ, я решил изменить объект addEventListener. Неправильно использовать:
this.addEventListener(...)
Используйте вместо:
lectureService.addEventListener(...)
Я изменил свой код для прослушивания этого события в основном приложении MXML, а затем внутри метода-обработчика вызову открытый метод ваших компонентов для использования новых данных.
Вы не можете решить все свои проблемы, просто расширяя класс. Вы действительно должны смотреть на команды для ваших HTTP-запросов.
Событие изменения свойства используется внутренне для наблюдателей и не будет отправлено в общий компонент. Что вы хотите сделать для своего LectureSlideDisplay
это переопределить источник установки. Каждый раз, когда он вызывается, к нему привязывается новое значение:
package components{
public class LectureSlideDisplay extends Image
{
override public function set source(value:Object):void
{
super.source = value;
// do whatever
}
public function LectureSlideDisplay()
{
super();
}
}
}
Вы должны действительно прочитать о том, как работает Binding.