Форум 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, 12:59
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 


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


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