Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Отправка события между mxml-компонентами. (http://www.flasher.ru/forum/showthread.php?t=152899)

DanMolti 24.03.2011 16:05

Отправка события между mxml-компонентами.
 
Есть ViewStack, в котором допустим три отдельных mxml компонента, открывающихся по клику на нужной кнопке с помощью ViewStack.selectedChild. Мне необходимо, чтобы при каждом открытии определенного компонента выполнялась функция, определенная внутри него. С помощью ceationComplete - она выполняется только один раз(чего и следовало ожидать)

Думаю сделать с помощью событий.
Попробывал так:

Код:

var myEventObj:Event = new Event( "myCustomEvent" );
                                dispatchEvent( myEventObj );

+
Код:

<fx:Metadata>
                [Event(name="myCustomEvent", type="flash.events.Event")]
</fx:Metadata>

это в компоненте, где лежат кнопки при клике кнопки, открывающей компонент.

А в открывающемся компоненте:

Код:

<components:ViewComponent id="MyComponent" myCustomEvent="onMyCustomEvent(event)"/>
ну и соответственно OnMyCustomEvent - нужная мне функция.

не работает. событие не ловится вообще.

Прошу помощи...

GBee 24.03.2011 16:34

Событие show

DanMolti 24.03.2011 16:51

если в открывающемся кмпоненте show прописываю - не происходит оно(((

DanMolti 24.03.2011 18:19

при изменении selectedChild не передается show((

Добавлено через 42 секунды
поэтому не работает. Еще мысли есть у кого-нибудь? очень нужно - второй день сижу с этим.

xsar 24.03.2011 18:47

addedToStage тоже не срабатывает?
Есть еще вариант слушать у ViewStack событие change.

DanMolti 24.03.2011 18:53

addedToStage почему-то зацикливается и происходит постоянное, многократное выполнение функции

Добавлено через 53 секунды
А вот как слушать CHANGE ViewStack одного компонента в другом я бы ОЧЕНЬ хотел узнать)) можно поподробнее?

Добавлено через 6 минут
щас еще раз попробывал adddedtoStage - оно когда первый раз запускаешь - то работает, а если второй раз(ушел на другой компонент и обратно на первый) уже не работает. то есть св-во только при инициализации выполняется((

alatar 24.03.2011 19:06

Цитата:

при изменении selectedChild не передается show((
show / hide отправляют сами компоненты. Можете просто в компоненте переопределить метод setVisible и в нем вызывать вашу функцию:
Код AS3:

override public function setVisible(value:Boolean,
                              noEvent:Boolean = false):void
{
    super.setVisible(value, noEvent);
    /*тут вызываете вашу функцию
      если используются эффекты,
      то надо дождаться окончания эффекта
    */

}

То, что вы пытаетесь проделать с событиями у вас не получится. Тут или надо отправлять событие непосредственно в компонент, либо реализовывать свою шину событий, по которой их и гонять.

DanMolti 24.03.2011 19:11

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

как попробую - отпишусь

xsar 24.03.2011 19:13

Код AS3:

viewStack.addEventListener(IndexChangedEvent.CHANGE,function (event:IndexChangeEvent):void{
                        switch (event.newIndex){
                        case 0: //выполняем одну функцию
                        case 1: //выполняем вторую функцию
                        case 3: //выполняем третью функцию
 
                        }
                });

Такой вариант разве не работает?

DanMolti 24.03.2011 19:17

тут похоже вот в чем дело - когда я меняю selectedChild - компонент становится видимым, потом я еще раз меняю selectedChild и обратно, но элементы ViewStack не скрываются, а просто вылазеют друг на друга и поэтому функция SetVisible выполняется только один раз. Надо разобраться.


Часовой пояс GMT +4, время: 07:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.