Flex и RIA блоги
2009-10-01 |
Мой дорогой блог... ... скучаю, знаю что висят черновики, но плавный переход от летнего отдыха к жесточайшим дедлайнам вынуждают меня убрать тебя в самый дальний ящик моего рабочего стола... |
2009-09-30 |
Запуск английской версии сайта Fuzzle CMS Мы рады сообщить, что запустили английскую версию сайта Fuzzle CMS. Мы потратили много времени, чтобы перевести не только основной сайт, а также документацию. Кроме того, мы стали вести блог на английском языке. Надеемся, что благодаря этому со временем Fuzzle станет известен не только в России, но и во всем мире. Оставайтесь с нами! |
2009-09-29 |
Казуал против хардкора Пишет flazm: Давно хотел написать о двух полюсах разработки игр — казуальном и хардкорном. Для начала давайте разберемся в чем же заключается «казуальность» или «хардкорность» игры вообще. |
Казуал против хардкора Пишет flazm: Давно хотел написать о двух полюсах разработки игр — казуальном и хардкорном. Для начала давайте разберемся в чем же заключается «казуальность» или «хардкорность» игры вообще. |
Adobe MAX встречает еще одного — право, славного производителя Я надеюсь, вы будете приятно удивлены, узнав, что Илья Панин и Александр Гахов долго и тайно делали Flex-продукт для Flexis => Cisco Systems и сделали его. Раскрытие тайны — на Adobe Groups. |
Adobe MAX встречает еще одного — право, славного производителя Я надеюсь, вы будете приятно удивлены, узнав, что Илья Панин и Александр Гахов долго и тайно делали Flex-продукт для Flexis => Cisco Systems и сделали его. Раскрытие тайны — на Adobe Groups. |
Flash GAMM! Kyiv 2009 Пишет Валерия Маллаева, организатор конференции Flash GAMM: Спешу сообщить, что третья конференция разработчиков flash-игр Flash GAMM! состоится 5-6 декабря 2009 года в Киеве. Любые ваши предложения, пожелания, заявки на доклады и прочее присылайте на flashgamm {(а)} gmail {.} com К сожалению официальный сайт сейчас не работает корректно из-за того, что был подпорчен вирусами, но мы сделаем всё возможное, чтобы он заработал в прежнем режиме как можно скорее. Как вы помните, в прошлом году мы привязывали Flash GAMM к датам Casual Connect. В этом году даты не совпадают, но появилась мысль — провести UAFPUG в Киеве в тех же числах, т.к многие едут на СС. Коннект будет проходить 21-23 октября (среда-пятница). Я прозвонила в GlobalLogic на предмет предоставления G-club, к сожалению в субботу 24-го там будет проходить награждение Программании, но 23 и 25 (пт и вс) помещение свободно. В связи с чем возникает вопрос, стоит ли проводить UAFPUG и если да, то когда — в пятницу или воскресенье? И если всё таки в субботу, то где? |
Flash GAMM! Kyiv 2009 Пишет Валерия Маллаева, организатор конференции Flash GAMM: Спешу сообщить, что третья конференция разработчиков flash-игр Flash GAMM! состоится 5-6 декабря 2009 года в Киеве. Любые ваши предложения, пожелания, заявки на доклады и прочее присылайте на flashgamm {(а)} gmail {.} com К сожалению официальный сайт сейчас не работает корректно из-за того, что был подпорчен вирусами, но мы сделаем всё возможное, чтобы он заработал в прежнем режиме как можно скорее. Как вы помните, в прошлом году мы привязывали Flash GAMM к датам Casual Connect. В этом году даты не совпадают, но появилась мысль — провести UAFPUG в Киеве в тех же числах, т.к многие едут на СС. Коннект будет проходить 21-23 октября (среда-пятница). Я прозвонила в GlobalLogic на предмет предоставления G-club, к сожалению в субботу 24-го там будет проходить награждение Программании, но 23 и 25 (пт и вс) помещение свободно. В связи с чем возникает вопрос, стоит ли проводить UAFPUG и если да, то когда — в пятницу или воскресенье? И если всё таки в субботу, то где? |
2009-09-28 |
Визуализация звука силами Sound.extract() Пишет makc3d: Всем давно известно, что SoundMixer.computeSpectrum() не рулит, когда одновременно играют несколько файлов, тем более с разных доменов. Всем также давно известно, что в 10й версии флеша появился Sound.extract(). И все давно жаловались, что метод этот сам по себе не так интересен, ибо к нему для полного счастья надо дописывать частотный анализ. Прошёл год, и мы продолжаем слышать те же жалобы от тех же лиц; а между тем всё, что нужно для их удовлетворения - google.com и часик времени, чтобы портировать FFT на AS3 с понятного нам языка. Что, собственно, я и сделал сегодня. Объектом порта стал класс FastFourierTransform, написанный в далёком 1997ом доктором Iain A. Robin на жаве. Как и исходный класс, AS3 версия работает с абстрактным массивом чисел, и посему может быть использована не только для обработки звука, а для всего, на что способна Ваша фантазия. Демонстрацию класса в работе (совместно с Sound.extract) можно наблюдать здесь, а исходники этого swf с проектом под FD+Flex4 SDK можно взять тут. При использовании кода в своих экспериментах ссылка на Ваш эксперимент в комментариях к этому посту обязательна |
Визуализация звука силами Sound.extract() Пишет makc3d: Всем давно известно, что SoundMixer.computeSpectrum() не рулит, когда одновременно играют несколько файлов, тем более с разных доменов. Всем также давно известно, что в 10й версии флеша появился Sound.extract(). И все давно жаловались, что метод этот сам по себе не так интересен, ибо к нему для полного счастья надо дописывать частотный анализ. Прошёл год, и мы продолжаем слышать те же жалобы от тех же лиц; а между тем всё, что нужно для их удовлетворения - google.com и часик времени, чтобы портировать FFT на AS3 с понятного нам языка. Что, собственно, я и сделал сегодня. Объектом порта стал класс FastFourierTransform, написанный в далёком 1997ом доктором Iain A. Robin на жаве. Как и исходный класс, AS3 версия работает с абстрактным массивом чисел, и посему может быть использована не только для обработки звука, а для всего, на что способна Ваша фантазия. Демонстрацию класса в работе (совместно с Sound.extract) можно наблюдать здесь, а исходники этого swf с проектом под FD+Flex4 SDK можно взять тут. При использовании кода в своих экспериментах ссылка на Ваш эксперимент в комментариях к этому посту обязательна |
2009-09-27 |
Универсальные правила хорошего кода Нам часто присылают коды, чтобы мы смотрели на них и говорили, хороши ли они. Насмотревшись на разные, мы поняли, что хорошего кода очень мало. Чтобы помочь нам решить эту проблему, решено опубликовать доселе секретные Унивесальные Правила Хорошего Кода для всех времен и языков программирования. Если ваш код не соответствует на 100 процентов хотя бы одному из нижеперечисленых пунктов, то он не хорош и не нужен. Пришлите этот код нам и мы вместе его улучшим. Итак, правила хорошего кода:
Данный список правил был бы неполным без полного перечня подправил, классифицирующих хороший код по ключевым признакам: 1. Хорошее в работе человека с кодомДо написания кода
Во время и после написания
2. Хороший код по размерам эффективной части кода
Данный спсико был бы неполным без своего продолжения, того самого, которое следует. |
Универсальные правила хорошего кода Нам часто присылают коды, чтобы мы смотрели на них и говорили, хороши ли они. Насмотревшись на разные, мы поняли, что хорошего кода очень мало. Чтобы помочь нам решить эту проблему, решено опубликовать доселе секретные Унивесальные Правила Хорошего Кода для всех времен и языков программирования. Если ваш код не соответствует на 100 процентов хотя бы одному из нижеперечисленых пунктов, то он не хорош и не нужен. Пришлите этот код нам и мы вместе его улучшим. Итак, правила хорошего кода:
Данный список правил был бы неполным без полного перечня подправил, классифицирующих хороший код по ключевым признакам: 1. Хорошее в работе человека с кодомДо написания кода
Во время и после написания
2. Хороший код по размерам эффективной части кода
Данный спсико был бы неполным без своего продолжения, того самого, которое следует. |
Выход новой версии Fuzzle CMS 2.6.1 Сегодня выпустили новую версию Fuzzle CMS 2.6.1. В основном изменения касаются исправления ошибок, связанных с введением функции «Редактировать дизайн» в предыдущей версии:
Нововвведение одно, но зато довольно приятное: теперь в оформлении блоков можно использовать скругление углов (опция «Радиус скругления»). Как вы можете заметить, эта функциональность очень часто используется в новом сайте Fuzzle. Ссылки на новую версию, как всегда, здесь: http://fuzzle-cms.ru/app/#/Demo |
2009-09-25 |
Компиляция отменяется! Наши резиденты в Черногории Дембицкий и Потапенко сделали подкаст, и вдруг — вы его не видели?
На самом деле я все перепутал, там надо смотреть каждую часть. Ребята анонсируют скорый выход редактора кода, аналогов которого не видели. В котором отменяется компиляция как ожидание. В котором... смотрите сами. Добавляю к посту новый тэг "montenegro", так как у будет больше новостей из Монтенегрии, то бишь Chernogorii. Хороших выходных! |
UMapper — онлайновый редактор карт, о котором будет доклад в ноябре, а сейчас ему нужно немного вашей поддержки С помощью UMapper можно создать свою карту с полезной дополнительной информацией и разместить ее у себя на сайте, удобно и бесплатно. На UMapper можно даже сделать географическую игру: (вот еще одна игра для тех, кто был на конференции ITSea 2009). Пока сервис еще в бете, но список его возможностей уже займет добрую страницу. Кстати, суровые челябинские флэшеры значительно участвуют в разрабоке его флэш интерфейса. А с 14 по 30 сентября на стартап-портале Vator.tv проходит конкурс молодых компаний со всего мира. Главный приз — 3-х минутная презентация перед крутыми инвесторами. UMapper тоже соревнуется за первое место, и ему помогли бы ваши голоса — проголосовать за UMappwer можно здесь. Разработчикам сервиса интересно ваше мнение о UMapper.com. Дело в том, что 14 ноября в Челябинске будет проходить встреча RAFPUG (скажу вам пока как бы по секрету). И сейчас создатели UMapper готовят доклад, где рассскажут о своих находках, сделанных при работе над этим сервисом. Пишите! |
2009-09-24 |
О Code Behind во Flex — еще раз Наглядные официальные статьи по Code Behind во Flex уже есть, включая статьи о Code Behind на русском и украинском, рекомендующие этот подход новичкам во Flex. Напишем о нем еще раз, так как мы о нем толком еще не писали. Это упущение, ведь Code Behind относится к лучшим практикам! "Code Behind" означает, что код находится за чем-то. А зачем это нужно?Code Behind помогает стройно разделить код приложения по задачам. Код, в котором задается дизайн находится в одном классе, а код с собственно логикой работы — в другом, том самом, который "Behind". Во Flex это выражается в том, что Actionscript находится за кодом MXML. Один из возможных (и хорошо работающих, проверенных подходов) к Code Behind реализуется с помощью т.н. Base-классов. Начнем с главного приложения проекта: 1. Для приложения создается базовый Actionscript-класс, в простейшем случае расширяющий родной флексовый класс package core { public class ApplicationBase extends Application { ... } } 2. Этот класс затем и используется как базовый в коде MXML-класса самого приложения: <?xml version="1.0" encoding="utf-8"?> <core:ApplicationBase ... > ... </core:ApplicationBase>
Что мы получили: есть Actionscript-класс В таком подходе использование тэга Таким образом достигается четкое разделение вычислительной логики и дизайна приложения. Логика идет в Actionscript, дизайн — остается в MXML-коде. |
2009-09-21 |
Что-то типа Flash App Store Что такое Flash Platform Services я не знаю, но то, что Adobe тестирует что-то типа Flash App Store |
2009-09-19 |
Новый виджет: Zoom Easing Button На днях мы добавили в каталог новый виджет: Zoom Easing Button Сам виджет представляет кнопку-картинку, которая увеличивается при наведении мыши. Однако, даже столь несложный эффект можно сделать забавным, если добавить к нему некую «физику». «Физика» заключается в том, что можно задавать функцию появления и исчезновения, благодаря чему можно сделать ощущение «резинки» (elastic) или «мячика» (bounce). Интересно, что первоначальный вариант этого виджета был без физики и смотрелся просто скучно. |
2009-09-17 |
Eclipse / Flash Builder: быстрый доступ к редактируемому файлу в структуре каталогов Flex Navigator Вы редактируете код в Eclipse / Flash / Flex Builder и хотите быстро найти в структуре проекта файл, содержащий данный код. Это легко. Понажимайте кнопки в указанном порядке, и у вас будет для этого шорткат:
Теперь у вас есть новое сочетание клавиш: [Ctrl + Alt + Left]. Используйте его для быстрого перехода из редактора кода прямо на файл, код которого редактируете. Он находится, отображается и фокусируется в дереве каталогов автоматически. Чтобы вернуться в редактор кода, нажмите F12. Unused shortcut has been found |
2009-09-16 |
Smoke test — это тест на дымность, а не тест во время перекура :-) Smoke test — это, как вы наверняка уже знаете, быстрое и грубое тестирование кода сразу после внесения в него правок. Обычно этот тест производится, чтобы определить, выжил ли продукт после свежей переделки, и стоит ли тестировать его глубже. Оказывается, этот термин пришел в программирование из реальной жизни. По поводу происхождения выражения "smoke test" Википедия говорит следующее:
А я-то всю дорогу думал иначе: что этот термин возник уже в разработке ПО и связан с курением. Мол, делаем фикс в коде, запускаем юнит-тесты и идем курить. Возвращаемся с перекура и смотрим, не красны ли наши тесты от критикал багов, делаем выводы и т.п. Теперь я думаю, что правда была где-то посередине |
Smoke test — это тест на дымность, а не тест во время перекура :-) Smoke test — это, как вы наверняка уже знаете, быстрое и грубое тестирование кода сразу после внесения в него правок. Обычно этот тест производится, чтобы определить, выжил ли продукт после свежей переделки, и стоит ли тестировать его глубже. Оказывается, этот термин пришел в программирование из реальной жизни. По поводу происхождения выражения "smoke test" Википедия говорит следующее:
А я-то всю дорогу думал иначе: что этот термин возник уже в разработке ПО и связан с курением. Мол, делаем фикс в коде, запускаем юнит-тесты и идем курить. Возвращаемся с перекура и смотрим, не красны ли наши тесты от критикал багов, делаем выводы и т.п. Теперь я думаю, что правда была где-то посередине |
2009-09-13 |
Мы ищем серьезных разработчиков и предоставляем серьезные скидки Для тех, кто уже давно присматривается к Fuzzle CMS, как к инструменту разработки сайтов, но все еще не решается попробовать: В течении ближайшей недели (13−20 сентября) мы предоставляем скидку в 90% на базовую версию Fuzzle CMS — т.е. она обойдется вам всего в 1850 р.! Прямая прибыль. Прямо сейчас вы можете сделать дорогой сайт клиенту, при этом заплатив минимальную стоимость за его разработку. Если у вас есть заказ, спешите воспользоваться нашим предложением. От желающих требуется связаться с нами по почте и прислать доменное имя, на которое и будет выдана лицензия. Количество лицензий ограничено. Если вы еще не до конца уверены, подходит ли система для вашего сайта — мы предоставляем: тестовую версию с лицензией неограниченного срока действия, демо-сайт в интернете, 10-дневную лицензию под абсолютно любой домен (все это здесь) Собственный проект. Вы хотели бы сделать на Fuzzle CMS небольшой проект «для себя», чтобы оценить возможности этой системы? Мы можем пойти вам навстречу, и выдать в рамках партнерской программы бесплатную лицензию. Свяжитесь с нами для обсуждения деталей. Упоминания об акции: |
2009-09-08 |
Flash Builder 4 и генерация геттеров/сеттеров или как это сделать “Супер удобно” В Flash Builder появилась созможность генерации геттера/сеттера для переменной. Адоб просто бъет все рекорды по “адобству” использования. чтобы сгенерить геттер/сеттер нужно набрать объявление переменной, ее тип, наводим курсор на набраный текст и тут 2 варианта:
И появляется оно — окошко генерации: Лично я не представляю как можно было извратить простую идею генерации небольшого кусочка кода. Вот скажите, зачем мне нужно каждый раз это окошко? Мало того что там несколько полей и галочек, так Flash Builder 4 еще ничего и не запоминает. И каждый раз мне нужно делать одни и те же действия (я предпочитаю вставлять геттеры/сеттеры прям на месте). Также после перехода на Flash Builder 4 меня подстерегла глобальная засада — изменили коди иерархию объектов в плагине билдера и мои Eclipse Monkey скрипты перестали работать(. Нужно заново изучать чего они натворили и переписывать. Я все чаще и чаще задумывають над тем чтобы перехать на IDEA. ) Ну и в качестве бонуса: |
2009-09-07 |
С мечтой о Flex на haXe: первые шаги начинающего хаксера Борис Внуков решил заняться haХе-рством. Убив полдня на настройку окружения haxecpp он предположил, что полезно будет описать найденные им подводные грабли этого процесса. Так появилась его первая, вступительная заметка о haXe. Приведу из нее короткую цитату:
Мысль о вытаскивании Flash\Flex-приложения (в качестве красивой морды) за пределы его песочницы посещала меня давно, равно как и регулярно (в предыдущих моих постах слышны отголоски этих посещений) Лейтмотивом мотивации являлось: "Какое было бы счастье забыть про Win32\MFC\wxWidgets\WinForms\Qt\Gtk\jQuery и прочее и прочее". И вот оно (счастье), кажется, медленно, но верно надвигается. Вы спрашиваете причём тут haXe? Чтобы не заниматься пустым копипастом, я предлагаю вам прочесть остаток полезной, не лишенной юмора статьи в блоге ее автора — nanoflexer.blogspot.com. Пожалуй, я приложу картинкуЯ нашел ее случайно на ццц.НаучныйЮмор.орг: А пока я писал этот пост, Борис опубликовал следующую часть своего знакомства с haXe. |
С мечтой о Flex на haXe: первые шаги начинающего хаксера Борис Внуков решил заняться haХе-рством. Убив полдня на настройку окружения haxecpp он предположил, что полезно будет описать найденные им подводные грабли этого процесса. Так появилась его первая, вступительная заметка о haXe. Приведу из нее короткую цитату:
Мысль о вытаскивании Flash\Flex-приложения (в качестве красивой морды) за пределы его песочницы посещала меня давно, равно как и регулярно (в предыдущих моих постах слышны отголоски этих посещений) Лейтмотивом мотивации являлось: "Какое было бы счастье забыть про Win32\MFC\wxWidgets\WinForms\Qt\Gtk\jQuery и прочее и прочее". И вот оно (счастье), кажется, медленно, но верно надвигается. Вы спрашиваете причём тут haXe? Чтобы не заниматься пустым копипастом, я предлагаю вам прочесть остаток полезной, не лишенной юмора статьи в блоге ее автора — nanoflexer.blogspot.com. Пожалуй, я приложу картинкуЯ нашел ее случайно на ццц.НаучныйЮмор.орг: А пока я писал этот пост, Борис опубликовал следующую часть своего знакомства с haXe. |
2009-09-06 |
Flex Data Binding в чистом AS3 проекте Все “знают” или покрайней мере слышали, что флексовый байндинг не работает в ActionScript 3 проектах, или слышали что он работает, но при этом занимает много места. Из за этого было написано, некоторое количество велосипедов(не мной — другими людьми, если поискать то решения 3 точно можно найти). Но стороние решения — это плохо, у нас теряется связь с flex проектами. Года полтора назад передомной встала задача, использовать одни и теже классы в AS3 проекте и во flex проекте, а т.к. большая часть этих классов была обычными байндабл VO, то приходилось в AS3 проекте просто вырезать метатег [Bindable] или попросту делать клонов нужных VO. Благо проект был совсем небольшим и на эти неудобства можно было закрыть глаза. На днях я таки решил заного попробовать подключить байндинг в AS3 проект, все получилось и на радость мне все оказалось очень хорошо — flexframework доработали и убрали лишние зависимости, теперь флешка с включенным байндингом занимает около 5 кб (релиз версия)! вот простой пример кода:
Скомпилированый пример: Flex Data Binding in AS3 project sample. You need to install adobe flash player 10 to view this content Всем удачного кодирования! |
Компенсируя непостоянство как паттерн, Господь дал нам Константинера ... а Константинер дал нам остальное. Если вам не хватило, и вы думаете, что Костя Ковалев перестал вести блог, то это ошибка. Индид, Костянтинер ведет новый блог и пишет в него много, много чаще, чем писал до этого! Он с нами, и это так хорошо. Он отвечает на комментарии, радует интересными вещами и неподдельными эмоциями. Эту прямоту я люблю в Косте КовалевеТакой бы прямоты и честности побольше нам в каждом. Новый блог Кости стал возможен также благодаря платформе под названием Juick. Сегодня Жуйк — одно из удобнейших средств быстрого информационного сообщения в формате блогов. Феномен Жуйка в том, что он использует для блоггинга открытый протокол XMPP, в прошлом Jabber. Это делает возможным чтение, постинг и комментирование прямо из вашего любимого чат-клиента: будь то миранда, пиджин, триллиан, или айЧят (выбор Кости — уважать и задуматься). Попробовав Жуйк, быстро понимаешь всю унылость Твиттера, с его жалкими 140 символами на сообщение. Но не об этом речь. Я всего лишь хотел сказать Косте, и чтобы вы знали, что я это хотел ему сказать: будь здоров, Костя! Расти коров, пей молоко! Лети высоко! Станет медом подотчетный тебе кластер объективной действительности. Приобретет окончательную стройность архитектура твоих проявлений. Озарится светом твой небликующий монитор и твой облик в целом! И это — неизбежно. Вот я и сказал |
Компенсируя непостоянство как антипаттерн, Господь дал нам Константинера ... а Константинер дал нам остальное. Если вам не хватило, и вы думаете, что Костя Ковалев перестал вести блог, то это ошибка. Индид, Костянтинер ведет новый блог и пишет в него много, много чаще, чем писал до этого! Он с нами, и это так хорошо. Он отвечает на комментарии, радует интересными вещами и неподдельными эмоциями. Эту прямоту я люблю в Косте КовалевеТакой бы прямоты и честности побольше нам в каждом. Новый блог Кости стал возможен также благодаря платформе под названием Juick. Сегодня Жуйк — одно из удобнейших средств быстрого информационного сообщения в формате блогов. Феномен Жуйка в том, что он использует для блоггинга открытый протокол XMPP, в прошлом Jabber. Это делает возможным чтение, постинг и комментирование прямо из вашего любимого чат-клиента: будь то миранда, пиджин, триллиан, или айЧят (выбор Кости — уважать и задуматься). Попробовав Жуйк, быстро понимаешь всю унылость Твиттера, с его жалкими 140 символами на сообщение. Но не об этом речь. Я всего лишь хотел сказать Косте, и чтобы вы знали, что я это хотел ему сказать: будь здоров, Костя! Расти коров, пей молоко! Лети высоко! Станет медом подотчетный тебе кластер объективной действительности. Приобретет окончательную стройность архитектура твоих проявлений. Озарится светом твой небликующий монитор и твой облик в целом! И это — неизбежно. Вот я и сказал |
2009-09-04 |
Как поймать все события в визуальных компонентах Flex-приложения? Используя dispatchEventHook! Удивительно: для того, чтобы перехватить все события в интерфейсе Flex-приложения, нужно написать всего одну строку кода, и она весьма проста: UIComponent.mx_internal::dispatchEventHook = myEventsHook; Здесь Еще удивительнее то, как мало об этой простой технике написано в сети. Гугл в основном находит применение к Cairngorm (снова это имя!), короткую запись на японском и занятный пост о задании поведения флекс-компонентов по умолчанию. Обратите внимание, речь идет не обо всех событиях флекса, но именно о событиях визуальных компонентов, а точнее — всех компонентов, унаследованнх от класса Но уже это открывает интересные возможности по исследованию работы флекс-приложения. Важно: именно по исследованию его работы, а не вторжению в нее, которое возможно, но рекомендуется лишь в крайних случаях — пахнет дурным кодом и хаками. А вот изучить, как работают флексовые события при тех или иных ваших действиях в коде — самое оно. Например, посмотрим, что происходит при перемещении компонента # Move text field: TextArea event: remove Panel 1 event: childRemove Panel 1 event: childrenChanged Panel 2 event: childrenChanged Panel 2 event: childAdd TextArea event: add TextArea event: htmlTextChanged TextArea event: textChanged TextArea event: valueCommit TextArea event: viewChanged TextArea event: viewChanged Panel 1 event: widthChanged Panel 1 event: heightChanged Panel 1 event: resize Panel 2 event: widthChanged Panel 2 event: heightChanged Panel 2 event: resize Panel 1 event: xChanged Panel 1 event: move Panel 2 event: xChanged Panel 2 event: yChanged Panel 2 event: move TextArea event: updateComplete Panel 1 event: updateComplete Panel 2 event: updateComplete Код, который выдает этот лог после нажатия кнопки "Move text":<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="preinitializeHandler();" > <mx:Script> <![CDATA[ import mx.core.UIComponent; private function preinitializeHandler():void { trace("Hooking UIComponent's event dispatcher"); UIComponent.mx_internal::dispatchEventHook = myEventsHook; } private function myEventsHook(event:Event, uiComponent:Object):void { if(uiComponent.name == "firstPanel") { trace("Panel 1 event: " + event.type ); } if(uiComponent.name == "secondPanel") { trace("Panel 2 event: " + event.type ); } if(uiComponent.name == "textArea") { trace("\tTextArea event: " + event.type ); } } private function moveText():void { trace('##################\n# Move text field: '); secondPanel.addChild(textArea); } ]]> </mx:Script> <mx:Panel id="firstPanel" > <mx:TextArea id="textArea" text="Hello world"/> </mx:Panel> <mx:Panel id="secondPanel" /> <mx:Button label="Move text" click="moveText();" /> </mx:Application> Наглядно и просто! А сколько бы пришлось лазить по исходникам Flex SDK, чтобы получить эту элегантную картину Данная техника помогает оптимизировать код. Например, если задать панелям и текстовому полю из вышеприведенного кода явные размеры (width, height), то событий будет почти в два раза меньше — отпадают всякие ресайзы, ведь размеры указаны явно, и у вас есть еще один повод сделать выводы. |
Как поймать все события в визуальных компонентах Flex-приложения? Используя dispatchEventHook! Удивительно: для того, чтобы перехватить все события в интерфейсе Flex-приложения, нужно написать всего одну строку кода, и она весьма проста: UIComponent.mx_internal::dispatchEventHook = myEventsHook; Здесь Еще удивительнее то, как мало об этой простой технике написано в сети. Гугл в основном находит применение к Cairngorm (снова это имя!), короткую запись на японском и занятный пост о задании поведения флекс-компонентов по умолчанию. Обратите внимание, речь идет не обо всех событиях флекса, но именно о событиях визуальных компонентов, а точнее — всех компонентов, унаследованнх от класса Но уже это открывает интересные возможности по исследованию работы флекс-приложения. Важно: именно по исследованию его работы, а не вторжению в нее, которое возможно, но рекомендуется лишь в крайних случаях — пахнет дурным кодом и хаками. А вот изучить, как работают флексовые события при тех или иных ваших действиях в коде — самое оно. Например, посмотрим, что происходит при перемещении компонента # Move text field: TextArea event: remove Panel 1 event: childRemove Panel 1 event: childrenChanged Panel 2 event: childrenChanged Panel 2 event: childAdd TextArea event: add TextArea event: htmlTextChanged TextArea event: textChanged TextArea event: valueCommit TextArea event: viewChanged TextArea event: viewChanged Panel 1 event: widthChanged Panel 1 event: heightChanged Panel 1 event: resize Panel 2 event: widthChanged Panel 2 event: heightChanged Panel 2 event: resize Panel 1 event: xChanged Panel 1 event: move Panel 2 event: xChanged Panel 2 event: yChanged Panel 2 event: move TextArea event: updateComplete Panel 1 event: updateComplete Panel 2 event: updateComplete Код, который выдает этот лог после нажатия кнопки "Move text":<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="preinitializeHandler();" > <mx:Script> <![CDATA[ import mx.core.UIComponent; private function preinitializeHandler():void { trace("Hooking UIComponent's event dispatcher"); UIComponent.mx_internal::dispatchEventHook = myEventsHook; } private function myEventsHook(event:Event, uiComponent:Object):void { if(uiComponent.name == "firstPanel") { trace("Panel 1 event: " + event.type ); } if(uiComponent.name == "secondPanel") { trace("Panel 2 event: " + event.type ); } if(uiComponent.name == "textArea") { trace("\tTextArea event: " + event.type ); } } private function moveText():void { trace('##################\n# Move text field: '); secondPanel.addChild(textArea); } ]]> </mx:Script> <mx:Panel id="firstPanel" > <mx:TextArea id="textArea" text="Hello world"/> </mx:Panel> <mx:Panel id="secondPanel" /> <mx:Button label="Move text" click="moveText();" /> </mx:Application> Наглядно и просто! А сколько бы пришлось лазить по исходникам Flex SDK, чтобы получить эту элегантную картину Данная техника помогает оптимизировать код. Например, если задать панелям и текстовому полю из вышеприведенного кода явные размеры (width, height), то событий будет почти в два раза меньше — отпадают всякие ресайзы, ведь размеры указаны явно, и у вас есть еще один повод сделать выводы. |