Я создаю приложение с помощью 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');
        }

Я уже пробовал:

  1. используя (как указано выше) addEventListener (PropertyChangeEvent.PROPERTY_CHANGE, methodName).
  2. пытался изменить [Bindable] на [Bindalbe ("nameEvent")] и слушать это, ничего.
  3. используя метод CreateWatcher, не работает.
  4. пытался взглянуть на сгенерированный код класса, но мне это не помогло

    if (this.hasEventListener ("propertyChange")) { this.dispatchEvent (mx.events.PropertyChangeEvent.createUpdateEvent (это, «лекция», oldValue, значение)); }

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

1
Nicola 18 Апр 2011 в 20:39

3 ответа

Лучший ответ

Рассмотрите возможность использования класса BindingUtils. Вы можете найти документацию здесь. И пара примеров использования: один, < a href = "http://www.popamihai.com/2009/07/flex/data-binding-in-flex-using-the-bindingutils-class/" rel = "nofollow"> два .

-1
Constantiner 18 Апр 2011 в 21:04
Спасибо, ваша ссылка оказалась очень полезной!
 – 
Nicola
19 Апр 2011 в 15:52

Тем, кто хочет получить ответ, я решил изменить объект addEventListener. Неправильно использовать:

this.addEventListener(...)

Используйте вместо:

lectureService.addEventListener(...)

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

1
Nicola 19 Апр 2011 в 15:56

Вы не можете решить все свои проблемы, просто расширив класс. Вам действительно стоит изучить Команды для ваших 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();
        }
   }
}

Вам действительно стоит ознакомиться с как работает привязка.

0
J_A_X 18 Апр 2011 в 21:11