|
|
|||||
Регистрация: Jun 2010
Сообщений: 69
|
PopUp окно
Как вызвать, передать и получить данные из окна, размещённого в родном mxml? Есть примеры, везде идёт вызов как отдельной компоненты. Нужно вызвать окно не создавая дополнительной компоненты.
|
|
|||||
Вот недавно делал поп-ап окно с настройками. В окне были различные элементы управления. Вызывается оно по клику на баттоне первой ф-цией. В поп-апе можно изменить параметры, по клику на кнопке субмит он закрывается и передает измененные переменные во вторую ф-цию главного приложения.
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; } 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(); } |
|
|||||
Регистрация: Jun 2010
Сообщений: 69
|
Спасибо!. Но как я понял из примера тут тоже 2 mxml файла. А как сделать всё на одном. Не создавая дополнительные модули.
+ Вопрос. При нажатии на кнопку создаётся новый компонент "окно". Большое количество нажатий н данную кнопку сказывается ли как то на производительность? Судя по всему просто перезаписывается старая, но на всякий случай спрошу. Последний раз редактировалось Freedom77; 06.10.2010 в 21:27. |
|
|||||
Цитата:
Цитата:
|
|
|||||
Регистрация: Jun 2010
Сообщений: 69
|
1) Желательно в одном, так как вызывающая mxml уже сама является модулем. А плодить модули модулей как то не впечатляет, хотя....
2)Не совсем понял. Вопрос в том, что если редактировать поля датагрида в отдельном окне, то отображать это окно нужно будет много раз. Данные конечно подгружаются каждый раз отдельно из базы. Просто не скажетсля ли на производительности (как указывается во многих примерах, хотя в вышеуказанном примере такого нет). Добавлено через 15 минут из описания рекомендаций Adobe, говорится что создавать окна можно как и addPopUp() так и createPopUp(). Разница в том что addPopUp() лучше использовать для одноразового вывода информации и код создания можно использовать в родном mxml. Пример: 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)); } Пошёл копать дальше. Добавлено через 2 часа 15 минут Создал компонент Windows. В программе есть открытие окна при щелчке: { var login:Window=Window(PopUpManager.createPopUp(this, Window , true) as spark.components.TitleWindow); } 1046: Тип не найден или не является константой времени компиляции: Window. 1120: Обращение несуществующего свойства Window. 1180: Вызов предположительно неопределенного метода Window. Что ему не нравиться? P.S.: Вызов идет из модуля основного приложения. Последний раз редактировалось Freedom77; 07.10.2010 в 00:18. |
|
|||||
создайте окно как компонент, а не как модуль.
Для своих целей я делаю так: 1) Создаю компонент - наследник TitleWindow (хотя все равно чего) 2) В нем прописываю метод public function show():void { PopupManager.addPopUp(this, Sprite(Application.application), true); PopupManager.centerPopUp(this); } Соответственно для передачи параметров вовнутрь можно юзать любой метод (win.setParam(bla,bla)). Для получения каких-то данных из окна, я обычно юзаю CloseEvent его детали и публичные геттеры окна (хотя, наверно, лучше генерить свои события) Пишу по памяти, в коде могут быть ошибки
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Jun 2010
Сообщений: 69
|
Создаю то как раз как компонент.
Добавлено через 1 час 6 минут Попробовал как описано Tour De Flex один в один (Flex 4 - TitleWindow). Создал отдельный проект и компонент Так работает. У меня копонент размещён не в корне, а в пакете. Может ли это как то вляить? Flash Builder при наведении верно определяет путь до компоненты. Добавлено через 2 часа 12 минут Проблема оказалась в том что он размещён в пакете. После переноса в пакет По умолчанию, то всё работает. Теперь вопрос: Как прописать адрес компоненты так, чтобы заработал из пакета. Последний раз редактировалось Freedom77; 07.10.2010 в 11:37. |
|
|||||
Регистрация: Apr 2010
Сообщений: 67
|
Чтобы не плодить тему спрошу здесь. Сделал в самом компоненте попапа метод:
Выдает ошибку: "Access of undefined property PopupManager". Видимо проблема в parentApplication, но не пойму что не так...
__________________
Mobile Ritmxoid |
Часовой пояс GMT +4, время: 15:46. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|