Гибкие часы привязываемого свойства другого класса - PullRequest
1 голос
/ 18 апреля 2011

Я создаю приложение с помощью 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(this, "lecture", oldValue, value)); }

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

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

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

this.addEventListener(...)

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

lectureService.addEventListener(...)

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

0 голосов
/ 18 апреля 2011

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

0 голосов
/ 18 апреля 2011

Рассмотрим использование BindingUtils класса.Вы можете найти документацию здесь .И пара примеров использования: один , два .

...