|
|
|||||
Регистрация: Jan 2010
Сообщений: 10
|
передача данных между компонентами
у меня в приложении несколько mxml компонентов, сейчас данные между ними передаются через события, появилась база данных, и я так понимаю можно теперь делать это через бд, как лучше?
|
|
|||||
[+1 17.02.10]
Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
|
События, БД недля того....
__________________
Flex+AS3 good) |
|
|||||
Регистрация: Nov 2009
Сообщений: 64
|
предлагаю компромис. :-)
локальная модель данных, туда событиями закидываете данные, и из нее же берете другими компонентами. гуглить ModelLocator.getInstance() во |
|
|||||
Регистрация: Apr 2010
Сообщений: 16
|
ModelLocator.getInstance() - это решение, я так понимаю, используется как proxy?
Вопросик по этому поводу: Я вот тоже на событиях пытаюсь делать. А если данные лежат глубоко в одной ветке компонентов, а обработчик совсем далеко в другой - как передать исходник в обработчик? ... щас делаю через корень, что-то типа: // main.mxml private function _initListeners():void { addEventListener(Constants.GET_GROUPS_LIST, _attachGroupsList); } private function _attachGroupsList(event:Event):void { event.target.dataProvider = groupsList as DataAC; } ... // UserForm.mxml private function _creationCompleteHandler():void{ groupDDList.dispatchEvent(new Event(Constants.GET_GROUPS_LIST, true)); } ... <s:DropDownList id="groupDDList" labelField="name" /> |
|
|||||
Ну так, для флекса, навскидку самое популярное
гуглить Cairngorm , PureMVC |
|
|||||
Регистрация: Apr 2010
Сообщений: 16
|
Опыта в AS3 у меня пока немного - решение может оказаться с точки зрения "рентабильности" сомнительное, не знаю по какой причине .... но как бы там ни было - оно работает и выполняет именно то, что нужно. А нужно следующее:
отправлять событие из любой точки (уровня) приложения и ловить его сразу в любой точке (на любом уровне). Допускаю, что наверное есть какой-нибудь специально предназначенный для этого "TopLevelSuperPuperRoot" - но т.к. знаю я не много, и такового пока не встречал. По поводу обхода дерева-событий - тут как-раз нужно чтобы больше никто никуда дальше не ходил ... хотя если понадобиться, я думаю решение будет очевидно. В общем-то созрело пока следующее решение: /* EventsManager.as */ package components { import flash.events.EventDispatcher; public final class EventsManager{ public static const EDIT_ITEM:String = "editItem"; public static const eventListener:EventDispatcher = new EventDispatcher(); } } /* SomeComponent.as */ package components { import spark.components.List; import components.*; public class SomeComponent extends List { public function SomeComponent() { super(); EventsManager.eventListener.addEventListener( EventsManager.EDIT_ITEM, function():void { trace('closer'); }); } } } /* ну и где-то в тридевятом царстве, в частности в customItemRenderer-е */ EventsManager.eventListener.dispatchEvent(new ListItemEvent(EventsManager.EDIT_ITEM, data)); 1) final прикрутил для красоты 2) public static const eventListener - думаю так правильнее будет И еще нарисовался интересный баг. Если использовать не closer а нечто вроде EventsManager.eventListener.addEventListener( EventsManager.EDIT_ITEM, _someHandler); private function _someHandler(e:ListItemEvent):void { trace('handler'); }; public static const eventListener на public static var eventListener то все сразу вываливается и _someHandler перестает срабатывать, даже если потом все назад вернуть - очень странное поведение. А через closer работает как часы. Могу предположить (знания мало, поэтому чисто теоретически), что какой-нибудь сборщик мусора собирает чего-нибудь куда-нибудь ибо экземпляра как-такового нет, хотя почему тогда работает первый раз, пока ручками не залезешь что-нить править? Никаких weakReference я не использую. FB и сам Flex самые последние, плеер тоже. (номера версий лень смотреть) Знающий народ - ответьте плиз - что за баг такой странный? |
|
|||||
Предалаю посмотреть в сторону Mate Framework. Первый, который писался конкретно для Flex, а не был портирован с другого языка как Cairngorm , PureMVC и др. Там как раз реализован безболезненный обмен событиями компонентов в EventMap-ах, что позволяет уменьшить общую связанность компонентов. Ну и собственно не надо громоздить кучу классов как в упомянутых выши фреймворках. Это конечно его огромный плюс.
__________________
2+2=5 |
|
|||||
Регистрация: Apr 2010
Сообщений: 16
|
2 BeDLiNt посмотрю обязательно - спасибо за ссылочку
по поводу моего предыдущего сообщения. Дополнение (как-то сразу не учел) Т.к. отлов событий происходит на глобальном уровне, то нужно будет ваять тип события под каждый конкретный случай - это с одной стороны хорошо - код становиться более читабельный, с другой надо написать чуточку больше. Вот по этому поводу и хотел спросить: нарисовались следующие "CRUD" операции: create, add, edit, update, revert, delete (ну в общем-то ни разу не новость) - и это практически для каждого VO (в моем случае) и не только. кто что может сказать отрицательного по поводу такого подхода, что используя статический подход, придется ваять под каждый конкретный случай довольно внушительное описание типов событий. Из особо положительного могу только отметить (на мой взгляд), что все в одно место теперь стекается, что касается проделываемых операций. public static const NEW_ITEM:String = "newItem"; public static const EDIT_ITEM:String = "editItem"; etc. |
Часовой пояс GMT +4, время: 12:30. |
|
« Предыдущая тема | Следующая тема » |
|
|