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

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

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

Регистрация: Oct 2011
Сообщений: 18
По умолчанию AIR и 2 класса (MovieClip, NativeWindow)

Имеетсяч приложение на air. Есть главный класс Main, расширяющий MovieClip, и есть класс ExportWindow, расширяющий NativeWindow. Задача в классе ExportWindow вызвать метод из Main. Додумался в конструкторе передавать параметр класс, от куда будет браться ссылка:
Код AS3:
public function ExportWindow(mainClassLink:Main, messege:String)
Но выглядит не очень красиво. Подскажите как сделать.

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

Регистрация: Nov 2007
Сообщений: 55
например, главный класс можно сделать синглтоном
http://gskinner.com/blog/archives/20...ingletons.html
http://garbage-collector.ru/2007/10/...nscript_3.html

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

Регистрация: Oct 2011
Сообщений: 18
По моему не лучшее решение

Старый 19.04.2012, 01:56
RJ Presto вне форума Посмотреть профиль Отправить личное сообщение для RJ Presto Найти все сообщения от RJ Presto
  № 4  
Ответить с цитированием
RJ Presto

Регистрация: Nov 2007
Сообщений: 55
не могу сказать, насколько хорошо это решение, не зная структуру вашего проекта.
еще можно сделать метод статичным или передавать аргументом непосредственно метод, который нужно вызвать.

также, вы можете отправлять из окна событие и слушать его в главном классе.


Последний раз редактировалось RJ Presto; 19.04.2012 в 01:59.
Старый 19.04.2012, 02:03
Milyh вне форума Посмотреть профиль Отправить личное сообщение для Milyh Найти все сообщения от Milyh
  № 5  
Ответить с цитированием
Milyh

Регистрация: Oct 2011
Сообщений: 18
В Main имеется функция закрывающая все окна и само собой приложение
Код AS3:
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();
       }
   }
}
А в ExportWindow, просто есть окно с кнопкой, выполняющей закртие всех окон/приложения
Код AS3:
package src.windows
{
   import ...;
 
   public class ExportWindow extends NativeWindow
   {	
       public function ExportWindow(mainClassLink:Main, messege:String)
       {		
             button.addEventListener(MouseEvent.CLICK, mainClassLink.closeApplication);    // Закрытие приложения
 
       }
   }
 
}


Последний раз редактировалось Milyh; 19.04.2012 в 02:11.
Старый 19.04.2012, 02:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
К чему вы этот код привели?

Есть какой-то экземпляр класса 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.
Старый 19.04.2012, 08:22
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 7  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Ну и зачем вам передавать ссылку на Main? Это действительно выглядит плохо. Передайте ссылку на функцию Main.closeApplication, ведь нужна только она.

Старый 19.04.2012, 09:54
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 8  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
1. Диспачте событие из ExportWindow.
2. Ловите его в классе Main.
Зачем все усложнять?
__________________
http://artem-lobachenkov.ru/

Старый 19.04.2012, 12:13
Milyh вне форума Посмотреть профиль Отправить личное сообщение для Milyh Найти все сообщения от Milyh
  № 9  
Ответить с цитированием
Milyh

Регистрация: Oct 2011
Сообщений: 18
Цитата:
Сообщение от Art_133 Посмотреть сообщение
1. Диспачте событие из ExportWindow.
2. Ловите его в классе Main.
Зачем все усложнять?
Можно пример?

Старый 19.04.2012, 13:00
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Пример:
Код AS3:
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));
       }
   }
 
}
При поднятии окна подписываться на него и в обработчике дергать нужный метод Main.

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

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

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


 


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


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