Облако тегов
Последние записи
- Maven+Spring+Hibernate+dbunit
- Водяные знаки
- Ошибка при установке AIR - Error #2032
- Контекстное меню в AdvancedDataGrid
- Повышение производительности AS3 приложений
- AdvancedDataGrid cортировка
- Создание Flex-приложений c использованием Parsley. Часть 3, MVC
- Создание Flex-приложений c использованием Parsley. Часть 2, обмен данными
- Создание Flex-приложений c использованием Parsley. Часть 1, связывание
- Принципы организации выкладываемых примеров
Полезные ссылки
Большое спасибо
| Создание Flex-приложений c использованием Parsley. Часть 2, обмен данными |
| 28.09.2009 17:32 | ||||||
|
В предыдущей статье, я начал рассказ о технологии, которая позволяет гибко конфигурировать Flex приложение, где рассмотрел первый аспект, а именно связывание различных компонентов приложения в одно целое. В данной статье хочу подробнее остановиться на организации модели обмена данными в приложении созданном с использованием Parsley. Чтобы создать действительно отторжимые модули, в приложении должна быть создана грамотная система обмена данными. Как мне кажется в Parsley есть всё, чтобы построение такой системы было максимально удобным и лёгким в использовании.
В Parsley предусмотрено два варианта инициализации процесса передачи данных и три варианта получения данных. Рассмотрим каждый из них. Начнём именно с вариантов инициализации передачи данных.
Первый вариант использует уже существующий механизм Flex -dispatchEvent. Но к этому добавляется один момент - мы должны указать Parsley, какие события он должен "слушать". Делается это добавлением мета-нформации в начале класса, сам класс должен, естественно расширять EventDispatcher. Рассмотрим данный вариант на примере класса ContactPanel.
В данном случае код приведён без "купюр". Объявление необходимых в обработке событий описывается в 6 строке. В то же время генерация событий происходит в с 27 строки по 45. В каждом из методов не делается ровным счётом ничего, кроме генерации события с тем набором данных, которые надо передать в другой компонент.
Второй метод инициализации процесса передачи данных рассмотрим на примере класса LocalContactService.
В данном примере стоит обратить внимание на 6 и 7 строку, где внедряется функция, которая будет инициировать процесс передачи сообщения в другой модуль. В данном примере это происходит на 38, 51, 54 и 60 строках, где генерируется событие об успешном или ошибочном завершении запроса к таблице в нашей БД. В данном случае стоит отметить, что класс ContactMessage НЕ является наследником класса Event.
Так же можно отметить внимание на директивы на 18 и 27 строках, которые используются для организации жизненного цикла компонента. В первом случае указывается метод, который будет выполнятся после создания этого объекта, второй метод будет выполнятся перед тем, как будет выгружен из контекста.
Теперь, когда мы умеем отправлять сообщения с данными, нам надо научиться принимать эти данные.
Первый способ - прямое связывание данных из сообщения/события с определённым объектом(MessageBinding). Для этого обратимся к строчкам 21-23 класса ContactForm, где используется данный вариант отслеживания данных.
Директива MessageBinding, сообщает, что эта переменная будет принимать то же значение, что и свойство item для любого объекта ContactMessage, которое было инициализировано одним способов передачи данных, описанных ранее. Что приводит нас к мысли, что надо чётко понимать - использование этого варианта чревато ошибками, когда событие данного типа генерируется для отличных от установления данной переменной целей. С другой стороны его можно использовать когда данные не требуют дополнительной обработки.
Второй вариант - обработка сообщений (MessageHadler). Для этого обратимся к 19-23 строкам класса ContactAction.
Первое, что надо иметь в виду, что так же как и связывание объектов, обработчик сообщений привязывается по КЛАССУ сообщения/события. Другими словами если использовать синтаксис
Тогда функция myHandler будет обрабатывать ВСЕ события класса ApplicationEvent. Если же необходимо обрабатывать строго определённые события, то для этого так же как и при связывании используется механизм выбора. Только в данном случае есть небольшое отличие при обработке событий (наследники Event) и собственных сообщений (не наследники Event). Для событий поле, по которому происходит выбор - это поле type. В то же время для своих сообщений вы это поле должны указать сами. используя директиву [Selector], как это сделано в классе ContactMessage. Если мы вернёмся к описанию метода tryDBHandler. То теперь мы понимаем, что данный метод должен обрабатывать события ApplicationEvent, у которых поле type принимает значение "tryDbEvent". Последний метод обработки событий - перхватчик события (MessageInterceptor). В данном примере я его не использовал. Суть данного метода сводиться к тому, что перед тем как событие будет обработано либо первым либо вторым способом это событие можно перехватить, обработать и самое главное - отправить событие дальше в обработку или запретить его дальнейшую обработку. Этот метод, как и несколько других моментов, которые не попадут в текущую серию заметок, я постараюсь рассмотреть отдельно. Следующая статья будет завершать краткий обзор библиотеки Parsley. В нём я постараюсь изложить своё видение того, как можно грамотно организовать приложение. Исходные коды можно взять из SVN репозитария https://gubber.ru/svn/samples/tag/parsley1/parsley/. Логин и пароль для доступа test/test.
Powered by !JoomlaComment 4.0alpha3
!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved." |