Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.10.2010, 17:28
Freedom77 вне форума Посмотреть профиль Отправить личное сообщение для Freedom77 Найти все сообщения от Freedom77
  № 1  
Ответить с цитированием
Freedom77

Регистрация: Jun 2010
Сообщений: 69
По умолчанию PopUp окно

Как вызвать, передать и получить данные из окна, размещённого в родном mxml? Есть примеры, везде идёт вызов как отдельной компоненты. Нужно вызвать окно не создавая дополнительной компоненты.

Старый 06.10.2010, 19:01
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Вот недавно делал поп-ап окно с настройками. В окне были различные элементы управления. Вызывается оно по клику на баттоне первой ф-цией. В поп-апе можно изменить параметры, по клику на кнопке субмит он закрывается и передает измененные переменные во вторую ф-цию главного приложения.

Код AS3:
import mx.managers.PopUpManager;//не забудь
 
protected function optionStart_clickHandler(event:MouseEvent):void
			{
				var pop2:optionBlock = optionBlock(PopUpManager.createPopUp(this, optionBlock, true));
				pop2.title="Настройки";
				pop2.targetMean = meanSend;
				pop2.targetRotate = rotateSend;
				pop2.targetSlider = cardWidth/100;
				PopUpManager.centerPopUp(pop2);
			}
 
			public function getOptions(sendMean:Boolean, sendRotate:Boolean, sendSlider:Number):void
			{
				meanSend=sendMean;
				rotateSend=sendRotate;
				image3.width = sendSlider;
 
			}
сам поп-ап optionBlock.mxml

Код AS3:
import mx.core.FlexGlobals;//это тоже важно
			import mx.managers.PopUpManager;
 
private function submitData():void {
				if (sr1.selected == true){
sendMean = true;
}
				if (rot.selected == true){
sendRotate = true;
}
				sendSlider = slSize.value*100;
 
				FlexGlobals.topLevelApplication.getOptions(sendMean, sendRotate, sendSlider);
				removeMe();
			}

Старый 06.10.2010, 20:53
Freedom77 вне форума Посмотреть профиль Отправить личное сообщение для Freedom77 Найти все сообщения от Freedom77
  № 3  
Ответить с цитированием
Freedom77

Регистрация: Jun 2010
Сообщений: 69
Спасибо!. Но как я понял из примера тут тоже 2 mxml файла. А как сделать всё на одном. Не создавая дополнительные модули.
+ Вопрос. При нажатии на кнопку создаётся новый компонент "окно". Большое количество нажатий н данную кнопку сказывается ли как то на производительность? Судя по всему просто перезаписывается старая, но на всякий случай спрошу.


Последний раз редактировалось Freedom77; 06.10.2010 в 21:27.
Старый 06.10.2010, 21:40
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 4  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Цитата:
Но как я понял из примера тут тоже 2 mxml файла. А как сделать всё на одном.
А зачем в одном?
Цитата:
При нажатии на кнопку создаётся новый компонент "окно". Большое количество нажатий н данную кнопку сказывается ли как то на производительность?
Не будет других нажатий, т. к. новое окно будет по типу как выводится алерт - к элементам первого нет доступа.

Старый 06.10.2010, 22:01
Freedom77 вне форума Посмотреть профиль Отправить личное сообщение для Freedom77 Найти все сообщения от Freedom77
  № 5  
Ответить с цитированием
Freedom77

Регистрация: Jun 2010
Сообщений: 69
1) Желательно в одном, так как вызывающая mxml уже сама является модулем. А плодить модули модулей как то не впечатляет, хотя....
2)Не совсем понял. Вопрос в том, что если редактировать поля датагрида в отдельном окне, то отображать это окно нужно будет много раз. Данные конечно подгружаются каждый раз отдельно из базы. Просто не скажетсля ли
Код AS3:
var windows:Window = new Window();
на производительности (как указывается во многих примерах, хотя в вышеуказанном примере такого нет).

Добавлено через 15 минут
из описания рекомендаций Adobe, говорится что создавать окна можно как и addPopUp() так и createPopUp(). Разница в том что addPopUp() лучше использовать для одноразового вывода информации и код создания можно использовать в родном mxml. Пример:
Код AS3:
 import mx.events.CloseEvent;
            import mx.controls.Label;
            import mx.events.FlexEvent;
            import mx.containers.TitleWindow;
            import mx.managers.PopUpManager;
 
            // method to open the TitleWindow on creationComplete
            private function openTitleWindow(evt:FlexEvent):void {
                // create and configure the TitleWindow
                var tw:TitleWindow = new TitleWindow();
                tw.title = "Title Goes Here";
                tw.showCloseButton = true;
                tw.addEventListener(Event.CLOSE, closeTitleWindow);
                // create and configure a Label
                var label:Label = new Label();
                label.text = "This is a very simple popup window";
                // add the Label to the TitleWindow
                tw.addChild(label);
                // open the TitleWindow as a modal popup window
                PopUpManager.addPopUp(tw, this, true);
            }
 
            // method to close the TitleWindow targeted by a close event
            private function closeTitleWindow(evt:CloseEvent):void {
                PopUpManager.removePopUp(TitleWindow(evt.target));
            }
А createPopUp() лучше использовать для многоразовых вызовов с редактированием данных. И в таком случае лучше создать отдельный mxml со всеми нужными компонентами.
Пошёл копать дальше.

Добавлено через 2 часа 15 минут
Создал компонент Windows.
В программе есть открытие окна при щелчке:
Код AS3:
{
var login:Window=Window(PopUpManager.createPopUp(this, Window , true) as spark.components.TitleWindow);
}
Builder ругается:
1046: Тип не найден или не является константой времени компиляции: Window.
1120: Обращение несуществующего свойства Window.
1180: Вызов предположительно неопределенного метода Window.
Что ему не нравиться?
P.S.: Вызов идет из модуля основного приложения.


Последний раз редактировалось Freedom77; 07.10.2010 в 00:18.
Старый 07.10.2010, 09:03
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
создайте окно как компонент, а не как модуль.

Для своих целей я делаю так:
1) Создаю компонент - наследник TitleWindow (хотя все равно чего)
2) В нем прописываю метод

Код AS3:
public function show():void
{
   PopupManager.addPopUp(this, Sprite(Application.application), true);
   PopupManager.centerPopUp(this);
}
3) Где нужно вызываю

Код AS3:
var win:MyWindow = new MyWindow();
win.show();
Соответственно для передачи параметров вовнутрь можно юзать любой метод (win.setParam(bla,bla)). Для получения каких-то данных из окна, я обычно юзаю CloseEvent его детали и публичные геттеры окна (хотя, наверно, лучше генерить свои события)

Пишу по памяти, в коде могут быть ошибки
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 07.10.2010, 09:58
Freedom77 вне форума Посмотреть профиль Отправить личное сообщение для Freedom77 Найти все сообщения от Freedom77
  № 7  
Ответить с цитированием
Freedom77

Регистрация: Jun 2010
Сообщений: 69
Создаю то как раз как компонент.

Добавлено через 1 час 6 минут
Попробовал как описано Tour De Flex один в один (Flex 4 - TitleWindow). Создал отдельный проект и компонент
Так работает.

У меня копонент размещён не в корне, а в пакете. Может ли это как то вляить? Flash Builder при наведении верно определяет путь до компоненты.

Добавлено через 2 часа 12 минут
Проблема оказалась в том что он размещён в пакете. После переноса в пакет По умолчанию, то всё работает.
Теперь вопрос: Как прописать адрес компоненты так, чтобы заработал из пакета.


Последний раз редактировалось Freedom77; 07.10.2010 в 11:37.
Старый 11.12.2010, 15:06
Ivanaka вне форума Посмотреть профиль Отправить личное сообщение для Ivanaka Посетить домашнюю страницу Ivanaka Найти все сообщения от Ivanaka
  № 8  
Ответить с цитированием
Ivanaka
 
Аватар для Ivanaka

Регистрация: Apr 2010
Сообщений: 67
Чтобы не плодить тему спрошу здесь. Сделал в самом компоненте попапа метод:
Код AS3:
			import mx.managers.PopUpManager;
			public function show(content:String):void	{
				PopupManager.createPopUp(parentApplication, this, true);
				PopUpManager.centerPopUp(this);
			}
Выдает ошибку: "Access of undefined property PopupManager". Видимо проблема в parentApplication, но не пойму что не так...
__________________
Mobile Ritmxoid

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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