Рубрики: Flex, Flex 3, frameworks, news
Новый Flex фреймворк - Mate
Не так давно вышла публичная альфа версия нового Flex фреймворка Mate.
Разработчики говорят о том, что это скорее бета, и к финальному релизу они не планируют вносить существенные изменения.
Не секрет, что при использовании событийной модели во Flex, часто разобраться в хитросплетениях происходящих событий бывает не легко. Mate как раз поможет более наглядно организовать ваши события в приложении, причем предлагается использовать для этого mxml.
Обработка событий станет более прозрачной. Основной частью и идеей фреймворка является карта событий, которая описывает обработку событий, происходящих в приложении.
И приятно, что использование Mate не должно приводить к полной зависимости проекта от него. Этот фреймворк не несет в себе лишний функционал, не придется вносить существенные изменения в архитектуру, а просто станет удобнее работать с обработкой событий, ну и уменьшится связанность, за счет применения injectors.
Из минусов я заметила то, что используя Mate, далеко не все можно проверить на этапе компиляции, что может приводить к эксепшенам в рантайме. Однако идея мне очень нравится и в целом фреймворк выглядит многообещающе.
Data Binding во Flex. Часть 1. Немного общих слов и истории
Это первая часть моего рассказа про Data Binding во Flex, который живьем можно было послушать на 12-ого апреля 2008 года на питерской встрече Russian Adobe Flash Platform User Group.
Презентацию можно скачать здесь, либо посмотреть в отчете Константинера о встрече RAFPUG в Питере в День Космонавтики.
Презентация рассчитана на мой сопутствующий рассказ, поэтому некоторые слайды можно неправильно воспринять без объяснений. Отчасти поэтому я и пишу небольшой цикл постов по этой теме. Хотя главная причина в том, что тема эта очень интересная, и хочется говорить об этом снова и снова. ![]()
Data Binding (связывание данных) можно назвать одной из основ разработки на Flex. Поэтому каждый уважающий себя разработчик прямо таки обязан в совершенстве владеть этим интересным и полезны механизмом.
Если вы разрабатываете на Flex, то, скорее всего, регулярно используете data binding. Особенно органично его использование в mxml. Вообще говоря, надо сильно извратиться, чтобы, используя mxml, ни разу не использовать data binding или связывание данных.
Data binding во Flash
Интересно, что на Flash платформе data binding появился еще во Flash, и некоторые разработчики активно его использовали.
Flash 8 для этого предоставлял Bindings tab и классы пакета mx.data.binding.
Кстати, не могу сказать, что связывание данных во Flash, было удобным. Хотя, не могу сказать, что хоть что-то там было удобно. ![]()
Еще более интересен тот факт, что Flash CS3 уже не предоставляет возможностей связывания данных своим разработчикам. Видимо, это очередной намек Adobe на то, что программистам надо смотреть в сторону Flex.
В документации для Flash CS3 про Data binding classes недвусмысленно говорится о том, что можно использовать старые механизмы связывания, но тогда и компилить можно будет только под ActionScript 2.0.
Что же такое связывание данных или data binding?
Суть связывания в автоматической синхронизации. Слово “автоматическая” особенно приятно звучит, так как это освобождает нас от какой-то рутинной работы. А кто хочет заниматься рутинной работой? ![]()
Наиболее распространенный случай - это синхронизация model и view.
При нормальном адекватном развитии событий в приложении существуют такие слои, как view, model, controller. View отображает данные модели. В большинстве случаев при изменении данных в модели, необходимо обновлять view. Это можно осуществить вручную путем подписывания на события изменения модели и вызовом методов обновления view. Связывание данных позволяет делать это автоматически.
Вам выбирать, что синхронизировать. Это может быть синхронизация данных, различных элементов GUI и тд и тп.
В качестве примера синхронизации элементов GUI можно привести такой код:
Code:
<mx:List id="list1" dataProvider="{listExample}"></mx:List> | |
<mx:List id="list2" dataProvider="{listExample}" | |
selectedIndex="{list1.selectedIndex}" | |
verticalScrollPosition="{list1.verticalScrollPosition}"> | |
</mx:List> |
Всего несколько строк кода позволяют определить сразу три синхронизации:
- dataProvider обоих списков синхронизируются с коллекцией listExample. Это значит, что при изменении listExample, оба списка сами обновят свой внешний вид.
- selectedIndex синхронизируется с соответствующим свойством первого списка. Таким образом, когда пользователь выделяет элементы первого списка, соотвествующие элементы автоматически выделяются во втором списке.
- аналогично синхронизируются значения verticalScrollPosition списков. Если пользователь скролит первый список, то автоматически скролится и второй список.
Легко ли перейти на Flex SDK 3?
На Flex Doc Team появилась статья Migrating applications from Flex 2 to Flex 3, в которой описаны возможные проблемы при перехода на SDK 3.
Радует, что проблем будет не так много. Расстраивает, что такие проблемы все-таки будут, так как существует достаточно объемный список изменений.
Вообще говоря, основные изменения Adobe провели в области локализации (о чем я уже писала в посте Изменения локализации во Flex 3) и в области своих charting компонент.
Причем последние изменения достаточно глобальные, что, например, привело наш с Graann проект, построенный на основе этих компонент к тому, что потребуется достаточно серьезная работа для того, чтобы перейти на SDK 3.
А у вас как происходит переход на SDK 3?
Flex фреймворки
В посте Open Source Flex Development Frameworks Show that Platform is Gaining Momentum приводится обзор open source flex фреймворков.
Лично я люблю странной любовью FlexUnit. А вы? ![]()
По горячим следам второй встречи RAFPUG
Только сегодня утром с поезда, поэтому напишу кратко и под впечатлением.
Побывала на второй встрече RAFPUG, а главное, послушала Andrew Shorten и Enrique Duvos в рамках Adobe Flex and AIR Pre-Release Tour.
Именно от докладов Andrew Shorten и Enrique Duvos у меня наиболее сильные впечатления. Мы так долго этого ждали, и вот они приехали в Россию.
И было, что послушать. Если вы это пропустили, то могу только посочувствовать, потому что даже просто послушать было приятно. Выступления очень хорошего уровня. Уровня, к сожалению, пока не достижимого в России. В общем, нам есть к чему стремиться - и то, к чему можно стремиться было проиллюстрировано.
Первое выступление Andrew Shorten пытались переводить (с посильной помощью Кости). Не знаю, как кого, но меня перевод только отвлекал от сути, поэтому радует, что остальные выступления евангелистов прошли без перевода. Даже вопросы разработчики задавали на английском языке, что не может не радовать, так как говорит о том, что сообщество становится все более профессиональным.
И Andrew Shorten, и Enrique Duvos рассказали много интересного, поэтому настоятельно рекомендую посмотреть их презентации и видео-записи выступлений. Лично для меня самыми интересными моментами были рассказ про BlazeDS и Open source.
Среди примеров приложений, сделанных на Flex приводился Buzzword, который был приобретен компанией Adobe. А это говорит о том, что Adobe сейчас заинтересован в таких web-приложениях. Более того, Adobe предлагает российским разработчикам участвовать в конкурсе на лучшее Flex 3, AIR приложение, и в качестве приза предлагается поездка на следующий Adobe MAX в Европе.
Завершали встречу выступления Кости, Ивана Дембицкого и Артемия Малкова.
Константин уже по традиции поведал нам о том, что такое RIA. Если есть еще люди, которые не знают, что это такое - убейте себя апстену. ![]()
Иван кратко поведал о том, как развивалось flash-сообщество до того, как Adobe все-таки обратил свое внимание на Россию. Удивительное рядом - ни слова про кривые Безье. ![]()
Артемий же рассказал о том, насколько может быть полезным применение flash-платформы в российском образовании.
Теперь совсем кратко о неофициальной части.
Тут мне очень повезло, потому что я познакомилась с самим Ростом! Ростислав оказался очень интересным во всех отношениях - не только как flash-разработчик, но и как человек.
Приятно, что команда riapriority была почти в полном составе, не было только Graann. Но мы будем работать над посещаемостью. ![]()
Жаль, что неофициальная часть началась очень поздно и необходимо было бежать на поезд. Но ведь мы все еще встретимся. ![]()
Изменения локализации во Flex 3
Ранее я уже писала про рантайм локализацию в посте Легкая локализация во Flex. А будет ли runtime локализация? И с выходом третьей беты Flex 3 можно с уверенностью сказать, что рантайм локализация не только будет, но уже и есть.
И вообще, радуют изменения которые произойдут в третьей версии Adobe Flex в области локализации приложений.
На мой взгляд основными бонусами станут:
- компиляция приложения с несколькими locale одновременно
- возможность переключения locale в рантайме (причем соотвествующие resource bundles могут быть как вкомпилены в приложение, так и подгружены)
- возможность программного создания resources, например из XML файла
- возможность использования картинок, звуков, видео, стилей и т. д. при локализации
Мало того, что вы можете запросто сделать кнопочку переключения языков у себя в приложении, так еще и при этом переключении менять не только надписи GUI, но и картинки, звуки и например размер шрифта. Кстати, изменение размера шрифта для некоторых языков прямо таки жизненно необходимо, на мой взгляд.
Более того, locale, загружаемую по умолчанию, можно определить в параметрах HTML обертки. А это говорит о том, что вы можете доставлять один swf файл со всеми языками и только в html в параметрах определять, какой язык сейчас увидит пользователь.
А теперь о менее приятном - о том, что вам придется переписать в своих существующих приложениях для перевода их на Flex 3 SDK и использования выше обозначенных бонусов.
Установив третью бету 3-его Flex, сразу же бросились в глаза варнинги по поводу устаревшего применения ResourceBundle с помощью соответствующего метатега.
- [ResourceBundle("bundlename")]
- private static var rb:ResourceBundle;
Примечательно, что использование директивы @Resource не изменилось. Однако в доках недвусмысленно намекается на то, что лучше не использовать этот способ, так как например, он не позволяет использовать переключение locale в рантайме.
Почему же так не нравится компилятору применение метатега ResourceBundle? Потому что при таком способе, вы лишаетесь удовольствия компилить приложение сразу с несколькими локалиями.
Новый способ взаимодействия с resource bundle - это использование ResourceManager. А скорее всего, вы будете использовать свойство resourceManager, которое теперь есть у всех потомков от UIComponent, Formatter или Validator.
Еще одной приятной вещью станет то, что не обязательно теперь файлы ресурсов делать полностью копиями друг друга. Можно забыть при экспшены при обращении к ресурсу, так как в localeChain можно задать массив locale-ей. Тут и произойдет чудо. Например, ваш язык приложения русский, но недостающие строки могут автоматически цепляться из английских ресурсов.
Все эти радости можно увидеть уже на существующей Flex 3 SDK 3 beta 3.
Например, в дополнительных параметрах компиляции прописываете -locale=US,RU,GE.
Кстати, не забудьте, произвести операции описанные в статье Flex 3:Feature Introductions: Runtime Localization, а иначе не избежать вам ошибок компиляции вида Unable to resolve resource bundle “collections” for locale. Правда для чартингов мне все равно пришлось ручками копировать.
В результате получаете swf с тремя встроенными locale-ми: английская, русская, немецкая. Добавляем в html-оболочку во flashVars localeChain=RU,US. В результате наблюдаем русскоязычное приложение, недостающая часть перевода которого пока на английском.
В общем, поздравляю нас всех - локализация приложений станет удобнее! ![]()
Автоматическое тестирование визуального представления компонент
Наткнулась на пост Automated Visual Testing of Components, в котором анонсируется релиз нового фреймворка Visual FlexUnit.
Visual FlexUnit разработан на основе FlexUnit и позволяет проводить автоматическое тестирование визуального представления компонент с использованием visual assertions.
По-моему, очень интересная разработка. Надо исследовать и при необходимости применять.
Russian Flash Platform User Group
Свершилось! Поздравляю всех поклонников и почитателей Flash Platform! ![]()
Читаем про Russian Flash Platform User Group в посте у Constantiner.
Конечно же, все бежим срочно присоединятся к группе.
Смотрим календарь группы и видим, что первая встреча скоро состоится в Москве.
Ну что же. Будем ждать встречи и в Питере. ![]()
Показ версии flex-приложения
Часто встречается такая задача - показ информации о версии приложения в GUI. Например, пользователь нажимает кнопку About и получает информацию о том, какой версией программы пользуется.
Пожалуй самое неудачное решение - это подгрузка информации о версии во время выполнения программы (например из конфигурационного xml). В этом случае вы никогда не можете быть уверены в том, с какой версией собственно имеете дело.
Вывод: информация о версии должна быть зашита в приложение на этапе компиляции и быть доступна в коде.
Способы решения:
- захардкодить информацию о версии в коде Это самый простой способ, который некоторые используют. Например, можно задействовать с этой целью несколько констант. Однако способ может быть продуктивным только, если вы полностью уверены, что в один прекрасный момент не забудете обновить значение версии. И это абсолютно не продуктивно, если у вас есть разные версии приложения, основанные на одной и той же версии кода.
- сделать include .as-файла с необходимыми данными Этот способ тоже требует ответственности от вас, так как файл тоже будет необходимо обновлять. Но этот способ достаточно удобен, если генерить as-файл автоматически при сборке. Похожий способ описан в посте Adding Build, Build Date, Revision and Revision Date in your Flex App.
- при сборке автоматически обновлять какой-то класс с информацией о версии Это просто немного другой идеологически способ, основанный на предыдущем. У вас есть какой-то класс со статическими константами, который вы автоматически корректируете при сборке. В этом случае приятно, что нет include-ов.
- использовать resource bundle (идею этого способа сгенерил Constantiner) Этот способ уже меньше похож на шаманство и больше на адекватный. Понятное дело, что автоматическая генерация properties файла принесет натоящее счастье.
- использование условной компиляции во Flex 3 Этот способ безусловно самый изящный. Более подробно можно почитать об условной компиляции в посте Условная компиляция в Flex 3 beta 2 ‘Moxie’. На английском можно почитать пост Conditional compilation in Moxie.
Приведу пример использования resource bundle.
Вы определяете (а при реальной сборке генерите автоматически), например файл Version.properties в виде:
version_number = 3.2.15
release_type = alpha
В коде используем обычный ResourceBundle API.
Вот пример для mxml.
XML:
<mx:TitleWindow x="172" y="121" width="250" height="200" layout="absolute"> | |
<mx:Text x="24" y="26" text="@Resource(key='version_number', bundle='Version')" /> | |
</mx:TitleWindow> |
Если вы знаете еще какие-то решения, то будет очень интересно их обсудить. ![]()
PS: Существует библиотека, которая частично помогает решить проблему. Эта библиотека описана в посте Release version API.
Splashup - графический редактор на Flex
Интересный проект, реализованный на Flex - Splashup. Это online графический редактор.
Выглядит очень достойно. Много функций и не тормозит. ![]()
:: Следующие >>