Для события Flex 3 установлено значение false .. как сделать так, чтобы оно всплыло? - PullRequest
0 голосов
/ 21 января 2010

У меня есть гибкое приложение с множеством вложенных видов и всплывающих окон. Я бы хотел перехватить все события CHANGE в приложении на верхнем уровне ... все они, просто чтобы уведомить пользователя, что он что-то изменил (поверьте мне, это имеет смысл в моем приложении).

Теперь я попытался добавить обработчик событий в обработчик Application creationComplete следующим образом:

private function init():void {  
    this.addEventListener(flash.events.Event.CHANGE, function f():void {...})
}

но это не работает .. почему? В документации я прочитал, что перед отправкой для события CHANGE задано значение "пузыри". Как я могу это изменить? Есть ли другой способ достичь моей цели? спасибо

Ответы [ 3 ]

1 голос
/ 21 января 2010

Попробуйте прослушивать события в SystemManager, а не в приложении.Насколько я понимаю, SystemManager находится в самом верху списка отображения, добавляя приложение, всплывающие окна и другие объекты пользовательского интерфейса в качестве дочерних.

В Flex 3 и ниже вы можете получить его через Application.application.systemManager.

Подробнее о SystemManager в блоге Дипы: http://iamdeepa.com/blog/?p=11

0 голосов
/ 08 июня 2011

Насколько я знаю, всплывающие окна происходят вне основного displayList приложения, поэтому, вероятно, поэтому вы не видите пузырей В этом случае вам нужно будет вручную добавить слушателей во всплывающие окна. Событие смены Flash выводит в соответствии с документами: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#CHANGE

Мне лично нравится использовать такие фреймворки, как RobotLegs или Parsley.

Основная идея заключается в том, что каждое представление и всплывающее окно получают посредника. Работа посредника заключается в обмене данными между представлением и командой / моделью. Эти посредники могут напрямую слушать представление и компоненты представления.

0 голосов
/ 08 июня 2011

У меня также возникают проблемы с группой элементов управления TextArea, где я хотел бы вместо этого прослушивать событие изменения в их контейнере (родительском элементе).

В итоге я расширил класс TextArea и создал прослушиватель для события change. Затем из слушателя я отправляю пользовательское событие, которое может вспыхнуть.

public class BubblingTextArea extends TextArea
{
    public function BubblingTextArea()
    {
        super();
        addEventListener(TextOperationEvent.CHANGE, changeHandler);
    }

    private function changeHandler(event:TextOperationEvent):void
    {
        dispatchEvent(new ChangeBubbleEvent(ChangeBubbleEvent.BUBBLE_CHANGE));
    }
}

Пользовательское событие:

public class ChangeBubbleEvent extends Event
{
    public static const BUBBLE_CHANGE:String = "bubbleChange";

    public function ChangeBubbleEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
    }
}

Я уверен, что кто-то может придумать более элегантное решение, так как я все еще совсем новичок в Flex и AS3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...