Предыдущий мой пост:Swiz Framework (краткий обзор)
В данном посте я попытаюсь объяснить из чего состоит и как работает простейщее приложение написаное на фреймоврке Swiz. Если у Вас возникнут какие либо вопросы или замечания, пишите комменты, постораюсь всем ответить. Исходники которые описываються в этом примере найти можно здесь
Итак самая простая диаграмма работы Flex приложения с использованием Swiz выглядит следующим образом:
View(или Presentation model) диспатчит событие, которое с помощью мета-тега
Для того что бы понять что во что инъецируется можно посмотреть на схему:
Модель инжектится в вид и контроллер. Соотвественно вид отображает модель, контроллер ее обновляет. Так же сервисы инжектятся в делегат, а делегат в свою очередь инжектится в контроллер.
Основное приложение
Разберем все состовляющие по порядку
Этим классом конфигурируеться весь фреймворк. Выглядит он следующим образом:
В beanProviders указываються контроллеры, модели, сервисы, делегаты которые нужно включать. В процессе обработки этих классов в них находяться все мета теги и происходят все внутренние процессы. Класс
Соотвественно после обработки Beans Swiz уже знает что у нас есть сервисы и контроллеры.
Представляет из себя простой mxml, самое интересное там это инжектинг:
Далее в любых местах можно использовать нашу модель user, например для отображения:
Вид отображает то что он получил из модели.
Далее пользователь правит любые данные, и нажимает кнопку сохранить.
Диспатчиться событие
Событие отлавливаеться в контроллере, и вызывает сервис. Команда userService.saveUser( user ) возвращает AsyncToken. Это соотвественно может быть любой делегат и любой вызов который возвращает AsyncToken.
После того как AsyncToken отдиспатчит событие result выполниться функция handleSaveUserResult
В этом месте мы могли бы соотвественно поменять модель или отдиспатчить какое либо событие которое так же успешно могло быть отловленно с помошью тега [Mediate] в любом контроллере или презентационной модели.
В следующих постах я разберу как работает более комплексное приложение на основе Swiz, а так же детально распишу свойства Swiz классов.
В данном посте я попытаюсь объяснить из чего состоит и как работает простейщее приложение написаное на фреймоврке Swiz. Если у Вас возникнут какие либо вопросы или замечания, пишите комменты, постораюсь всем ответить. Исходники которые описываються в этом примере найти можно здесь
Итак самая простая диаграмма работы Flex приложения с использованием Swiz выглядит следующим образом:
View(или Presentation model) диспатчит событие, которое с помощью мета-тега
[Mediate(event="someEvent")]
отлавливается Controller, далее контроллер вызывает сервис и меняет модель. Вид только отражает изменения в модели.Инжектинг
Для того что бы понять что во что инъецируется можно посмотреть на схему:
Модель инжектится в вид и контроллер. Соотвественно вид отображает модель, контроллер ее обновляет. Так же сервисы инжектятся в делегат, а делегат в свою очередь инжектится в контроллер.
Составляющие
Основное приложение
SwizQuickstart.mxml
включает в себя компонент Swiz у которого указывается beanProviders и config, а так же вид UserForm<fx:Declarations> <swiz:Swiz> <swiz:beanProviders> <config:Beans /> </swiz:beanProviders> <swiz:config> <swiz:SwizConfig eventPackages="org.swizframework.quickswiz.event.*" viewPackages="org.swizframework.quickswiz.view.*" /> </swiz:config> </swiz:Swiz> </fx:Declarations> <view:UserForm id="userForm" />
Разберем все состовляющие по порядку
SwizConfig
Этим классом конфигурируеться весь фреймворк. Выглядит он следующим образом:
<swiz:SwizConfig setUpEventType="{ Event.ADDED_TO_STAGE }" setUpEventPhase="{ EventPhase.CAPTURING_PHASE }" setUpEventPriority="50" tearDownEventType="{ Event.REMOVED_FROM_STAGE }" tearDownEventPhase="{ EventPhase.CAPTURING_PHASE }" tearDownEventPriority="50" eventPackages="com.foo.events, org.bar.events" validateEventTypes="true" viewPackages="com.foo.views, org.bar.events" defaultFaultHandler="handleUnhandledFaults" defaultDispatcher="global" />
Beans
В beanProviders указываються контроллеры, модели, сервисы, делегаты которые нужно включать. В процессе обработки этих классов в них находяться все мета теги и происходят все внутренние процессы. Класс
<config:Beans />
выглядит следующим образом:<swiz:BeanProvider xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:swiz="http://swiz.swizframework.org" xmlns:service="org.swizframework.quickswiz.service.*" xmlns:controller="org.swizframework.quickswiz.controller.*"> <service:UserService id="userService"/> <controller:UserController id="userController"/> <!-- We'll use the Swiz ServiceHelper to help simulate a server-side call. --> <swiz:ServiceHelper id="serviceHelper" /> </swiz:BeanProvider>
Соотвественно после обработки Beans Swiz уже знает что у нас есть сервисы и контроллеры.
UserForm
Представляет из себя простой mxml, самое интересное там это инжектинг:
[Bindable] [Inject( source="userController.currentUser", bind="true" )] public var user : User;
Далее в любых местах можно использовать нашу модель user, например для отображения:
<s:TextInput id="firstName" text="{user.firstName}" />
Как это все работает:
Вид отображает то что он получил из модели.
<s:TextInput id="firstName" text="{user.firstName}" />
Далее пользователь правит любые данные, и нажимает кнопку сохранить.
<s:Button label="Save" click="saveUser()" />
Диспатчиться событие
user.firstName = firstName.text;
user.lastName = lastName.text;
user.email = email.text;
var event : UserEvent = new UserEvent( UserEvent.SAVE_USER_REQUESTED );
event.user = user;
dispatchEvent( event );
Событие отлавливаеться в контроллере, и вызывает сервис. Команда userService.saveUser( user ) возвращает AsyncToken. Это соотвественно может быть любой делегат и любой вызов который возвращает AsyncToken.
[Mediate( event="UserEvent.SAVE_USER_REQUESTED", properties="user" )] public function saveUser( user : User ) : void { serviceHelper.executeServiceCall( userService.saveUser( user ), handleSaveUserResult ); }
После того как AsyncToken отдиспатчит событие result выполниться функция handleSaveUserResult
private function handleSaveUserResult( event : ResultEvent ) : void { Alert.show( 'User saved successfully!' ); }
В этом месте мы могли бы соотвественно поменять модель или отдиспатчить какое либо событие которое так же успешно могло быть отловленно с помошью тега [Mediate] в любом контроллере или презентационной модели.
В следующих постах я разберу как работает более комплексное приложение на основе Swiz, а так же детально распишу свойства Swiz классов.