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

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

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

Регистрация: Jun 2007
Сообщений: 374
Question Подписка вложенных моделей

Допустим, вьювер должен реагировать на изменение 3х моделей, которые находятся непонятно где, например:

Код AS3:
AppGlobal.model.resources.model1
AppGlobal.model.playground.user.item.model2
AppGlobal.model.model3
Чтобы подписать что-то на измения, надо для начала подписать родительскую модель на событие создания. А если уровней вложенности несколько, то всех родителей.
Для решения этой задачи вытащил из flex ChangeWatcher, но у него есть минус - при изменении имени какого-либо свойства из цепочки, он перестает работать, не ругаясь при этом.

Код AS3:
BindingUtils.bindSetter(this._setModel1, AppGlobal.model, ["resources","model1"], false,true);
BindingUtils.bindSetter(this._setModel2, AppGlobal.model, ["playground","user","item","model2"], false,true);
BindingUtils.bindSetter(this._setModel3, AppGlobal.model, ["model3"], false,true);

Как вы решаете в целом проблему подписки на события таких моделей?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Передайте view ссылки на модели, пусть подпишется.

Старый 10.11.2010, 12:44
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 3  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
alatar, так не известно, создались ли модели или нет. Если бы была гарантия 100% существования нужного свойства нужной модели, то проблемы бы не возникало. Их создают другие контроллеры, никак с этим вьювером не связанные.

Старый 10.11.2010, 12:55
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Подписываю представление(я) на события создания дочерних моделей в родительских моделях. Можно подписаться к общему узлу, имеющим в своих ветках нужных родителей. Событие добавления/удаления доставляется к этому узлу баблингом.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.11.2010, 23:13
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от dimarik Посмотреть сообщение
Подписываю представление(я) на события создания дочерних моделей в родительских моделях. Можно подписаться к общему узлу, имеющим в своих ветках нужных родителей. Событие добавления/удаления доставляется к этому узлу баблингом.
А как представление узнает какое представление создать к новоиспеченной модели? Элементарным перебором?

Цитата:
Да, своя реализация, с помощью EventDispatcher'а. Почти своя, если учесть что DOM адоб реализовал только для дисплей-листа. Мой велосипед - конгломерат модернизации идей BloodHound'а и исследования поведения нативного EventDispatcher. Эта штука просто реализует GoF паттерн Composite. Хочу разродится в скором времени статейкой в своем бложике по этому поводу.
Отказался от дисплайобджектов в моделях? Будет интересно пощупать. У меня всегда были проблемы с реализации композита гофовского )

Старый 10.11.2010, 23:34
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
А как представление узнает какое представление создать к новоиспеченной модели? Элементарным перебором?
Достаточно того, что родительское представление ожидает появление новой дочерней модельки от узловой модельки. Пример - витрина магазина. Набор дочерних представлений товара. Новое представление появляется/удаляется по мере добавления/удаления моделей в родительский узел. Представления имеют один тип, который принимает один тип модельки.

Сложнее хотите? Давайте применим AbstractFactory. По типу модели выдадим тип представления. Полный консенсус. )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.11.2010, 12:59
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Если бы была гарантия 100% существования нужного свойства нужной модели, то проблемы бы не возникало.
Можно и не знать о существовании свойсв у модели. Вам ведь нужны только изменения? Ну так пошлите событие, что свойство n изменило свое значение с x на y. Модели можно передавать как базовый класс или интерфейс, у которого есть только нужное событие.

Старый 10.11.2010, 14:28
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 8  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
dimarik, а как баблинг реализуете в моделях? Своя событийная модель?
Если подписывать все на создание всего, особенно при сильных уровнях вложенности, можно здорово запутаться.

alatar, (что тут писать, если нечего подписывать?).addEventListener(...)
И в какой момент подписывать.

Старый 10.11.2010, 22:59
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от s8000_1 Посмотреть сообщение
dimarik, а как баблинг реализуете в моделях? Своя событийная модель?
Да, своя реализация, с помощью EventDispatcher'а. Почти своя, если учесть что DOM адоб реализовал только для дисплей-листа. Мой велосипед - конгломерат модернизации идей BloodHound'а и исследования поведения нативного EventDispatcher. Эта штука просто реализует GoF паттерн Composite. Хочу разродится в скором времени статейкой в своем бложике по этому поводу.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.11.2010, 15:08
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
И в какой момент подписывать.
В момент добавления модели к view.
Цитата:
что тут писать, если нечего подписывать?
Когда модели у вас создаются, приложение об этом как-то узнает? Или они у вас как партизаны, тихо организовались и в лес ушли?

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

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

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


 


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


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