![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Имеетсяч приложение на air. Есть главный класс Main, расширяющий MovieClip, и есть класс ExportWindow, расширяющий NativeWindow. Задача в классе ExportWindow вызвать метод из Main. Додумался в конструкторе передавать параметр класс, от куда будет браться ссылка:
Но выглядит не очень красиво. Подскажите как сделать. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 55
|
например, главный класс можно сделать синглтоном
http://gskinner.com/blog/archives/20...ingletons.html http://garbage-collector.ru/2007/10/...nscript_3.html |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
По моему не лучшее решение
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 55
|
не могу сказать, насколько хорошо это решение, не зная структуру вашего проекта.
еще можно сделать метод статичным или передавать аргументом непосредственно метод, который нужно вызвать. также, вы можете отправлять из окна событие и слушать его в главном классе. Последний раз редактировалось RJ Presto; 19.04.2012 в 01:59. |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
В Main имеется функция закрывающая все окна и само собой приложение
package { import ... public class Main extends MovieClip { ... // Закрытие программы public function closeApplication(e:Event = null):void { var windowsArray:Array = NativeApplication.nativeApplication.openedWindows; for (var i:int = 0; i < windowsArray.length; i++) windowsArray[i].close(); } } } Последний раз редактировалось Milyh; 19.04.2012 в 02:11. |
|
|||||
|
К чему вы этот код привели?
Есть какой-то экземпляр класса Main Есть какое-то окно ExportWindow 1. Если есть уверенность, что ситуации, когда main не существует, а ExportWindow существует быть не может - можно передать в конструкторе, не вижу здесь ничего некрасисовго 2. Если main может отсутствовать - нужен третий объект, владелец этого main, и этого владельца передаём в конструктор. Можно слать события при появляении main у владельца, если ExportWindow надо на это реагировать (подняли окно - подписались, опустили - отписались) 3. Ещё можно при создании main проверять, существует ли ExportWindow (а если он не один... весело будет) и присваивать exportWindow.main = main, если существует. А если создаем ExportWindow, тоже проверять существует ли main и присваивать. Вобщем, метод - не фонтан. 4. Сделать Main синглтоном. Получаем что-то среднее между 1-м и 2-м вариантом, только лишаемся возможности контроля над временем создания этого Main. Плюс этот Main светит глобальной точкой доступа на всё приложение и не даёт создать свой второй экземпляр. Оно нам надо? 5. Фантазия не имеет границ, можно моного всего придумать с событиями, шиной событий, регистрами объектов, IoC-контейнерами, но, думаю, стоит остановиться. И да, можно вообще отказаться от обращения к Main из ExportWindow (во многих случаях так и нужно сделать) и слать из ExportWindow события (баблингом или напрямую слушать - это как удобнее будет) Последний раз редактировалось expl; 19.04.2012 в 02:23. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Ну и зачем вам передавать ссылку на Main? Это действительно выглядит плохо. Передайте ссылку на функцию Main.closeApplication, ведь нужна только она.
|
|
|||||
|
1. Диспачте событие из ExportWindow.
2. Ловите его в классе Main. Зачем все усложнять? ![]()
__________________
http://artem-lobachenkov.ru/ |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 18
|
Можно пример?
|
|
|||||
|
Пример:
package src.windows { import ...; public class ExportWindow extends NativeWindow { public function ExportWindow(mainClassLink:Main, messege:String) { button.addEventListener(MouseEvent.CLICK, onButtonClick); // Закрытие приложения } private function onButtonClick(event:MouseEvent):void { dispatchEvent(new ExportWindowEvent(ExportWindowEvent.BUTTON_CLICK)); } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|