воскресенье, марта 18, 2007
Семейство Flex Explorer
Flex Primitive Explorer - создание графических примитивов.
Flex Filter Explorer - создание графических фильтров.
Flex Transitions and Effects Explorer - эффекты и переходы.
четверг, марта 15, 2007
Flex 2.0 Primitive Explorer
Некоторые тонкости использования E4X
1. Устанавливайте resultFormat="e4x" для HTTPService
По умолчанию, resultFormat для <mx:HTTPService> является "object". Но при получении XML данных, "object" - это не то, что вам нужно. Если же задать "e4x", то lastResult будет являтся XML объектом, который можно парсить с помощью E4X выражений.
2. E4X выражения не ссылаются на самый верхний тег XML
Итак, имеем <mx:HTTPService>, названный myService с resultFormat="e4x", возвращающим следующую структуру:
<?xml version="1.0"?>
<people>
<person>mike</person>
<person>sho</person>
<person>nj</person>
</people>
Эти данные содержатся в myService.lastResult (или в event.result.) Как получить XMLList всех элементов <person>?
Часто думают, что E4X выражения составляют от корневого тега <people>:
var personNodes:XMLList = myService.lastResult.people.person;
// неправильно
А правильно так :
var personNodes:XMLList = myService.lastResult.person;
// правильно
3. Используйте for each, а не for
ECMAScript давно имеет структуру for (ключ в коллекции). Но обратите внимание, что при использовании этого выражения переменной цикла является ключ коллекции, а не значение текущего элемента, поэтому в цикле необходимо писать коллекция[ключ] для ображения к его значению.
E4X добавляет следующую структуру (которую можно использовать на любой коллекции): for each (значение в коллекции). Рассмотрим примеры:
for (var key:* in myService.lastResult.person) {
var value:* = myService.lastResult.person[key];
...
}
А теперь for each: for each (var value:* in myService.lastResult.person)
{... }
4. Используйте for each (child in parent.*), вместо for each (child in parent)
Итак, есть документ :
var mydocument:XML =Теперь необходимо перебрать всех мышей у этого кота.
<root>
<cat>
<mouse />
<mouse />
<mouse />
</cat>
</root>
var cats:XMLList = mydocument.cat; // это только один элемент
var o:Object = ...; for each (var property:* in o) ...Вы думаете, что следующим образом вы делаете тоже самое:
for each (var mouse:XML in cats) ... // неправильно
Увы, E4X отличается. В E4X, "cats" - это коллекция -- список узлов <cat>, а в примере есть только один <cat>.
Поэтому, чтобы перебрать всех мышей необходимо использовать следующую структуру:// перебрать все прямые дочерние элементы
for each (var mouse:XML in cats.*) { ... }
// или перебрать всех прямых потомков, которые являются узлами <mouse>
for each (var mouse:XML in cats.mouse) { ... }
5. E4X специально стирает различия между XML и XMLList
При изучении E4X, вы узнаете, что есть два типа данных: XML и XMLList. Вроде легко, но потом появляются проблемы с неправильной типизацией данных.var mydocument =
<root>
<rabbit name="Brownster Johansson McGee" />
</root>;
// 'mydocument.rabbit' - список всех узлов <rabbit>, значит
// myPetRabbit должен быть XMLList? Но я назвал переменную
// 'myPetRabbit', а не 'myPetRabbits',
// потому что я знаю, что заяц только один.
var myPetRabbit:XMLList = mydocument.rabbit;
// Как же его зовут? Почему следующее выражение не вызывает ошибки,
//ведь myPetRabbit - это XMLList?
trace(myPetRabbit.@name);
Причина в том, что E4X намеренно стирает различия между XML и XMLList. Каждый XMLList, который содержит один элемент, будет рассматриваться как XML. (Если 'myPetRabbit' будет содержать несколько узлов, то myPetRabbit.@name будет возвращать список всех атрибутов "name" все узлов <rabbit>.)
Например, рассмотрим документацию по методу XMLList.toString():
- Если объект XML имеет простую структуру, то метод toString() возвращает содержимое узлов без тегов, атрибутов, пространств имен и т.п.
- Если объект XML имеет сложную структуру, то метод toString() возвращает все содержимое, вклюяая теги, атрибуты и т.п.
То есть если XMLList содержит <node>hello</node>, то toString() вернет "hello"; но если он содержит <node>hello</node><node>goodbye</node>, toString() вернет "<node>hello</node><node>goodbye</node>" (а не "hellogoodbye"). Если же вам всегда нужен полный XML, используйте toXMLString() вместо of toString().
6. Внимание! Простое выражение может вам дорого обойтись
При использовании простых объектов нет ничего удивительного в использовании следующего кода:
var x:Object = ...;
if (x.y.z == 3)
foo(x.y.z);
Код работает быстро, проблем не вознкает.
Но в E4X операция типа "x.y.z" будет означать, что цикл проходит через всю XML-структуру и ищет соответствующие совпадения:
var mydocument:XML = ...;
if (mydocument.cat.mouse.length() == 3)
{foo(mydocument.cat.mouse)};
Итак, если вам потом понадобиться использовать результат, то лучше сохранить его в XMLLis переменнойt:
var mydocument:XML = ...;
var mice:XMLList = mydocument.cat.mouse;
if (mice.length() == 3)
{foo(mice);}
7. Используйте дебаггер
Отладчик поможет вам разобраться в значениях XML и XMLList переменных.
Отсюда
среда, марта 07, 2007
Презентация Papervision
Взял отсюда.
вторник, марта 06, 2007
ActionScript 2.0 - 3.0 Migration Cheatsheet
понедельник, марта 05, 2007
четверг, марта 01, 2007
Easing-эффекты в одном месте
FlexLib на Google Code
суббота, февраля 17, 2007
Примеры движка Papervision3D
Может для заядлых 3D-шников это ерунда, но меня впечатлило!
среда, февраля 14, 2007
Adobe Flex Coding Guidelines
Flex Style Explorer 2.01
1) Навороченный ColorPicker (эх, Василий, не видели они вашего)
2) Экспорт всего CSS
3) Поддержка StyleName
4) Стили форматирования текста
5) Возможность введения значения руками и слайдером
6) Добавлены ToggleButtonBar, HDividedBox, VDividedBox, TextArea, VRule, VSlider, ColorPicker, ToolTip
7) Улучшенная навигация
8) Индикация отредактированных компонентов
9) Работа с прозрачным приложением
10) Улучшение UI
среда, февраля 07, 2007
Прикольный скин - мятые салфетки
четверг, января 25, 2007
Макросы в html-темплейтах флекс-проекта
Название проекта, MyProject.
${application}
Имя приложения, MyApp.
${version_major}
Major-версия плеера, т.е. 9 для 9.0 r28.
${version_minor}
Minor-версия, т.е. 0 для 9.0 r28.
${version_revision}
revision-версия, т.е. 28 для 9.0 r28.
${build_suffix}
Суффикс, определяющий тип версии приложения, "-debug" - для отладочной версии и "" - для релиза.
${swf}
Имя SWF файла без расширения .swf. Эквивалентно ${application}${build_suffix}.
${bgcolor}
Фон приложения, заданный в атрибуте backgroundColor тега <mx:Application> или в поле метаданных backgroundColor в [SWF] metadata атрибуте [SWF(backgroundColor="#ffffff")] public class MyApp extends Sprite.
${width} и ${height}
Ширина и высота приложения, заданная в <mx:Application> или в метаданных [SWF(width="300", height="400")] public class MyApp extends Sprite.
${title}
заголовок приложения, заданный в атрибуте pageTitle тега <mx:Application> или в [SWF(pageTitle="flex r00lz")] public class MyApp extends Sprite.
Отсюда
среда, января 24, 2007
Flex2LocalDebugger - трейс-панель во флексе
LocalDebugger.show('test'); вылетает окошко Alert с надписью test.
А LocalDebugger.trace('test'); заносит информацию в окно отладки. Flex2LocalDebugger работает через LocalConnection, поэтому для правильной работы функции trace необходимо запустить файлик Flex2LocalDebuggerConsole.html, который идет в архиве. В нем и будут отображаться все ваши трейсы.
PageFlip во флеше и флексе
среда, января 17, 2007
felxoBooth - сервис для эксбиционистов
пятница, января 12, 2007
Альтернатива FMS - Wowza Media Server
О цене WMS будет объявлено позже.
четверг, января 11, 2007
Несколько заметок про Date
Например, если задать в качестве месяца -1, то из даты будет вычтен месяц:
var dt:Date = new Date( 2006, -1, 1 );
// Thu Dec 1 00:00:00 GMT+0300 2005Теперь попытаемся создать 0 января 2006 года:
dt = new Date( 2006, 0, 0 );Получим 31 декабря 2005 года.
0 марта не существует, поэтому получаем 29 февраля (2008 год будет високосным):
dt = new Date( 2008, 2, 0 );Теперь вычтем из текущей даты неделю:
dt = new Date();
dt.date = dt.date - 7;Получим Thu Jan 4 2006.
Вот такая математика:)
С прошедшими праздниками всех!
.