Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Хорошее MVC (http://www.flasher.ru/forum/showthread.php?t=138349)

etc 14.04.2010 17:16

Нет, я имел ввиду удаление одного землянина с земли одновременно с удалением оного из базы данных.

Котяра 15.04.2010 10:36

Цитата:

Сообщение от Psycho Tiger (Сообщение 900276)
То зачем событию всплывать, чтобы его можно было поймать через
Код AS3:

model.addEventListener("Обновление__angleData",func);

Или я опять не о том?

Я имел ввиду именно, то.
У меня тоже древовидная структуру, только в отличии от etc - я не делал аналог DisplayObject с addChild и.т.п.
У меня просто в конструкторе модели - передаётся ссылка на парент (которую, в принципе можно и сменить потом, но мне пока ни разу не понадобилось.)

Код AS3:

 model.submodel = new Submodel(model);
// вернее чаще так
в классе модели:
submodel = new Submodel(this);

причём основную модель я пару-раз делал ребёнком контроллера - тогда все события модели доходят до контроллера всплытием.
пример : слушаем смерть землянина:
в контроллере
Код AS3:

model.addUpdateFieldListener(HumanModelField.IS_DEAD,removeHuman);
 
public function removeHuman(e:ModelEvent)
{
var deadHumanModel:HumanModel = e.target as HumanModel;
var isDead :Boolean= e.field;
if(isDead )
{
//удаляем подмодель  из модели
// удаляем вид связанный с моделью
// прочеее
}
}

т.е. тут контроллеру не надо подписывать на события модели каждого человека. он просто слушает все сообщения о смерти)

etc 15.04.2010 10:40

currentTarget? Ты уверен? :)

Котяра 15.04.2010 11:07

Цитата:

Сообщение от etc (Сообщение 900663)
currentTarget? Ты уверен? :)

блин, скосячил - target конечно..)

Psycho Tiger 15.04.2010 18:18

Цитата:

т.е. тут контроллеру не надо подписывать на события модели каждого человека. он просто слушает все сообщения о смерти)
Ааа... всё, теперь всё стало понятней) Только вот:
Код AS3:

var isDead :Boolean= e.field;

Ты посылаешь в событии то что нужно узнать обработчику?
И вот тут:
Код AS3:

model.addUpdateFieldListener(HumanModelField.IS_DEAD,removeHuman);

покажи код метода addUpdateFieldListener, не очень ясно почему не просто addEventListener )

Котяра 16.04.2010 09:42

тут у меня "не очень" ООП-ный код используется..
ModelEvent имеет свойство field:*
Цитата:

addUpdateFieldListener===addChangeModelFieldListener
переименовал,а вообще можно field и не использовать.
Код AS3:

public function removeHuman(e:ModelEvent)
{
var deadHumanModel:HumanModel = e.target as HumanModel;
var isDead :Boolean= deadHumanModel.isDead;
if(isDead )
{
...


Psycho Tiger 16.04.2010 16:34

Угу, мне вот второй способ кажется логичней. Лучше спросить кому надо, чем знать это всем.
А вот это зачем? Для какой цели?
Код AS3:

_modelFieldEventListenersArray.push( { event:ModelEvent.CHANGE + field, listener:listener,scope:scope } );


Котяра 16.04.2010 16:58

это регистрация для автоматического удаления всех листенеров

Psycho Tiger 16.04.2010 20:36

Понял. Спасибо за разъяснения.

dimarik 20.04.2010 00:25

Цитата:

Сообщение от Tahion (Сообщение 900175)
Да неплохая, она у меня даже есть :). Но вобщемто там многие патерны не описаны существующие)

Например?

Добавлено через 5 минут
Цитата:

Сообщение от Котяра (Сообщение 900662)
У меня тоже древовидная структуру, только в отличии от etc - я не делал аналог DisplayObject с addChild и.т.п.
У меня просто в конструкторе модели - передаётся ссылка на парент (которую, в принципе можно и сменить потом, но мне пока ни разу не понадобилось.)

Стандартный GOF-паттерн Composite. Что у тебя, что у Дениса, точнее, у Блуда.

Добавлено через 11 минут
Цитата:

Сообщение от Котяра (Сообщение 900662)
причём основную модель я пару-раз делал ребёнком контроллера - тогда все события модели доходят до контроллера всплытием.

А я видел фильм с Арнольдом Шварценеггером, "Total Recall". И мне понравилась тетя с тремя сисями. Ну хоть и не по-человечески, а то и приятно ).

Добавлено через 18 минут
Цитата:

Сообщение от Котяра (Сообщение 900662)
Код AS3:

model.addUpdateFieldListener(HumanModelField.IS_DEAD,removeHuman);


Откуда такая ненависть к абстракции? В продукте лучше не упоминать о "concrete product" всуе. Здесь подойдет какой-нибудь Event.COMPLETE, вместо ХУМАНМОДЕЛ.МЕРТВ.

Я уж молчу о нововведении "addUpdateFieldListener". Чем EventDispatcher не угодил? Не следует множить сущее без необходимости.


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

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