Я создаю приложение с помощью 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 (это, «лекция», oldValue, значение)); }
Как я могу прослушать и поместить заполненный объект в другой класс? Может быть, проблема в том, что я слушаю из другого класса, но как в этом случае я могу это реализовать? Кажется, что событие отправлено, но я не могу его слушать.
3 ответа
Рассмотрите возможность использования класса BindingUtils
. Вы можете найти документацию здесь. И пара примеров использования: один, < a href = "http://www.popamihai.com/2009/07/flex/data-binding-in-flex-using-the-bindingutils-class/" rel = "nofollow"> два .
Тем, кто хочет получить ответ, я решил изменить объект 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();
}
}
}
Вам действительно стоит ознакомиться с как работает привязка.
Похожие вопросы
Новые вопросы
apache-flex
Apache Flex [НЕ CSS FLEXBOX] - это среда для разработки многофункциональных интернет-приложений, работающих в Flash Player или Adobe Air. Изначально разработанный компанией Adobe, Flex был подарен Apache Software Foundation в 2011 году и стал проектом Apache высшего уровня в декабре 2012 года.