Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   вызов функции основного приложения из дочернего окна (http://www.flasher.ru/forum/showthread.php?t=135559)

spacecadet 26.01.2010 12:54

вызов функции основного приложения из дочернего окна
 
Здравствуйте! :)

Столкнулся с проблемой вызова функций и обращения к переменным основного приложения из pop-up окна. Проблема заключается в том, что не получается это сделать :) В обратном порядке (обращение к переменным и функциям pop-up окна из основного приложения) - получается:

в файле myPopUpWindow описана переменная:
Код AS1/AS2:

...
public var myArray
...

в основном приложении в файле mainApp описана другая переменная и при создании pop-up окна ее значение передается переменной в экземпляр myPopUpWindow:

Код AS1/AS2:

...
public var someArray
...
 
...
public function mainAppFunction():void
...
 
...
var newPopUpWindow:myPopUpWindow = new myPopUpWindow();
newPopUpWindow.myArray = someArray;
...

Вопрос в том, как из pop-up окна вызвать функцию mainAppFunction? Точнее, как создать ссылку на действующий экземпляр mainApp, чтобы получить доступ к его свойствам и методам?

BeDLiNt 26.01.2010 13:16

Ваше PopUp окно не должно знать о свойствах и методах основного приложения, и тем более изменять их. Если Вам надо передать основному приложению данные от окна, пусть оно шлёт событие (кастомное) с необходимой информацией, а основное приложение ловит.

spacecadet 26.01.2010 13:23

Смысл понятен, а можно ли пример действующего функционала?

BeDLiNt 26.01.2010 13:57

Допустим так:
В основном приложении:
Код AS3:

PopUpManager.addPopUp(newPopUpWindow, this, true);
PopUpManager.centerPopUp(newPopUpWindow);
newPopUpWindow.addEventListener(MyDataEvent.UPDATE, handleMyDataUpdate);
 
...
 
private function handleMyDataUpdate(event:MyDataEvent):void
{
        var myData:Object = event.myData;
        ...
}

Класс MyDataEvent.as:
Код AS3:

package view.events
{
        import flash.events.Event;
 
        public class MyDataEvent extends Event
        {
 
                public static const UPDATE:String = "dataUpdate";
 
                private var _myData:Object;
 
                public function MyDataEvent(type:String, myData:Object)
                {
                        super(type, true);
                        _myData = myData;
                }
 
                public function get myData():Object
                {
                        return _myData;
                }
 
                override public function clone():Event
                {
                        return new MyDataEvent(type, myData);
                }
        }
}

А в PopUp окне так:
Код AS3:

dispatchEvent(new MyDataEvent(MyDataEvent.UPDATE, myData));

Писал на коленке, но вроде всё должно работать.

Кип 26.01.2010 14:37

Цитата:

Точнее как создать ссылку на действующий экземпляр mainApp, чтобы получить доступ к его свойствам и методам?
Она и так есть: parentDocument

spacecadet 26.01.2010 15:13

Цитата:

Сообщение от Кип (Сообщение 882168)
Она и так есть: parentDocument

- да, так вызов искомой функции происходит. Но как я понимаю этот способ не является комильфо? Лучше организовать эвенты? Или это все же дело вкуса?

Добавлено через 2 часа 20 минут
К сожалению, parentDocument всегда указывает на самого первого родителя, и если необходимо организовать обмен между popup и его дочерним popup - то parentDocument не помогает. Таким образом использую симбиоз методов BeDLiNt'а и Кип'а. Спасибо вам большое, за помощь и отзывчивость! Первый форум за всю мою жизнь, на котором участники-профессионалы действительно ПОМОГАЮТ новичкам и нубам, а не посылают их на гугол, строя из себя крутых супер-интеллектуалов! :)


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

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