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

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

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
По умолчанию команда наверх из глубокого вложения

есть у меня примерно такая структура:

windowContainer -> window -> component -> someItem -> someButton

windowContainer — это DisplayObject, в котором есть метод newWindow(window:IWindow), который организует открытие нового окна и "зашторивание" открытых ранее окон. так же есть другие методы, неважно.
window — собственно окно, с методами close(), get/set enabled и т.д.
component — любой компонент. в данном случае это будут превьюшки.
someItem — объект-превьюшка. содержит картинку и пару кнопок.
someButton — кнопочка (одна из этой пары), по нажатию на которую нужно открыть новое окно в windowContainer

Ну вот собственно по неопытности парюсь, как это лучше всего обставить.
Пока варианты такие:

1. SomeButton implements IWindowOpener и содержит public function get window():IWindow. по нажатию диспатчим наверх событие-запрос, его ловит WindowContainer и делает this.newWindow((e.target as IWindowOpener).window);

2. передавать ссылку на windowContainer каждому ребенку

3. синглтон. тем более, что windowContainer в любой момент времени должен быть в единственном экземпляре.

что посоветуете, бывалые?
__________________
Поймай яблоко 2!

Старый 03.07.2010, 18:28
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
может быть проще подписаться на событие CLICK у кнопочки, а потом вручную вызвать windowContainer.newWindow(...). Или у вас вся структура живет своей жизнью, что выгоднее все через события делать?

Старый 03.07.2010, 18:29
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
1. SomeButton implements IWindowOpener и содержит public function get window():IWindow. по нажатию диспатчим наверх событие-запрос, его ловит WindowContainer и делает this.newWindow((e.target as IWindowOpener).window);
Зачем зашивать возможность окрытия окна в интерфейсе, что с этой кнопкой надо будет сделать через интерфейс IWindowOpener?

Напротив, она сама открывает окно,
что мешает просто подписаться на клик и кинуть по этому клику событие, которое поймает какой-ниь контроллер и откроет нужное окно

Да и вообще в большинстве случаев можно напрямую в обработчике клика написать windowContainer.newWindow(<наше нужное окно>)

Как сделано у нас(НЕ значит что удачно):
- Есть PopUp-манаджер, который вначале инициализируется слоем, на котором будут располагаться все окна
- Этому менеджеру вообще все равно IWindow его просят показать или DisplayObject - он просто добавляет его на слой и подкладывает подложку(если выставлен параметр "modal") - чтобы на ранее открытые окна или в игру клики не проходили
т.е. у него 2 метода addPopUp(popUp: DisplayObject, modal:Boolean) и removePopUp(popUp: DisplayObject)
- Дальше делаем окно с методом open() - в котором оно само себя добавляет в менеджер
- Нужно добавить не окно, а менюшку? - пожалуйста - интерфейс не ограничен.


Последний раз редактировалось expl; 03.07.2010 в 18:31.
Старый 03.07.2010, 18:42
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
i.o.
ну просто какое окно открывать знает именно кнопка

expl
у меня все окна modal. менеджер (windowContainer) просто открывает окна и организует модальность. но ему надо подать это окно — вот и спрашиваю, как?

обоим:
ну вот я и думаю подписать windowContainer на CLICK по себе (будем ловить все что всплывает), и если e.target is IWindowOpener, то this.newWindow((e.target as IWindowOpener).window) — это и есть вариант 1 =) в данном случае интерфейс я использую для опознания что ли.
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
но ему надо подать это окно — вот и спрашиваю, как?
у нас менеджер - синглтон - напрямую ему окно и передаем
(Опять же, не считаю наше решение идеальным)

Цитата:
this.newWindow((e.target as IWindowOpener).window) — это и есть вариант 1 =) в данном случае интерфейс я использую для опознания что ли.
ИМХО лучше сделать событие OpenWindow и сделать у него поле window,
потому что седня кнопка открывает окно, завтра - выполяет другое действие.

Или другой вариант - была текстовая кнопка - стала кнопка-иконка
И что - давай делать ее наследника с интерфейсом IWindowOpener? как-то не комильфо.


Последний раз редактировалось expl; 03.07.2010 в 19:02.
Старый 03.07.2010, 19:21
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
другими словами: вариант 3 нравится больше?
__________________
Поймай яблоко 2!

Старый 03.07.2010, 20:54
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Ну да 3-й.
2-й тоже адекватен, но чтобы его применить нужны какие-то дополнительные причины:
- одни окна должны появляться поверх всего приложения, а другие поверх элементов внутри какой-нть скроллируемой области, т.е. возможно несколько windowContainer'ов;
- нужно протестировать элементы в отдельности от windowContainera;
- не знаю что ещё;
Если причин нет - то он только повысит сложность

Старый 03.07.2010, 22:38
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
ясно. в принципе к нему склонялся больше всего.
спасибо за советы!
__________________
Поймай яблоко 2!

Старый 03.07.2010, 23:13
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Если я правильно понял, то у компонента есть свойство window. Можно просто добавить свойство windowContainer в window. Следовательно, станет возможным компонентом обратится к windowContainer через window.windowContainer, т.е мы сможем достучаться до windowContainer без синглтона. Так лучше с позиции ООП.

Старый 04.07.2010, 02:10
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от i.o. Посмотреть сообщение
Если я правильно понял, то у компонента есть свойство window. Можно просто добавить свойство windowContainer в window.
у компонента сейчас нет свойства window

Цитата:
Сообщение от Скрипун Посмотреть сообщение
не знаю почему, но таких задач что-то не возникало, как у автора топика
хм. тоже не знаю почему )
__________________
Поймай яблоко 2!

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

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

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


 


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


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