Введение
Flex - это framework для Flash.Сам по себе Flash имеет ограничения, т.к. разрабатывался под web.
Чтобы создавать "полноценные" desktop приложения нужен AIR.
AIR - приложения требуют установленной AIR-машины на целевом компьютере.
Flex:
Основной файл проекта - xml файл. В нём должен быть корневой тег mx:Application<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<!-- разметка, по аналогии с html -->
<mx:Label text="Моё первое flex-приложение!"></mx:Label>
</mx:Application>
Основной файл - так же xml-файл, но корневой тег mx:WindowedApplication.
Скрипты:
Чтобы добавить скрипт, в код добавляется тег mx:Script
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init1(); init2();"> <!-- initialize - указывается функция, которая сработает при старте приложения -->
<mx:Script> <!-- сейчас мы находимся внутри объекта "Application" и определяем его свойства и методы -->
<![CDATA[
/* здесь только импорты, определение переменных и функций.
внутри фукнций можно уже делать что угодно. */
]]>
</mx:Script>
Инструменты
Flex Builder 3
Настройка интерфейса
список функций по текущему файлу: Window → Outlineзакладки добавляются по клику правой кнопкой мыши: Bookmark...
удалить закладку можно только через панель управления закладками:
Window → Other Views... → General → Bookmarks
Горячие клавиши
alt+↑ (или ↓) | переместить стоку вверх/вниз |
ctrl+alt+↑(или ↓) | дублировать строку |
ctrl+d | удалить строку |
ctrl+f | окно поиска, настройка "продолжить с начала страницы" называется "Wrap search" |
ctrl+k | найти следующее вхождение выделенного текста |
FlashDevelop
Требует установленного Adobe SDK (и Microsoft .NET 2.0).Для создания Adobe AIR проектов надо прописать пусть к SDK:
Tools → Programm Settings... (F10) → AS3Context → Flex SDK Location → указать расположение
Далее создаём проект AIR Flex 3 Project
В созданном проекте будет два bat-файла. В обоих надо указать путь к Flex SDK.
Один файл создаёт сертификат с паролем. Сертификат нужен для сборке air-пакета.
Другой файл создаёт air-пакет.
Чтобы после компилирования по F5 автоматически открывался Firefox, нужно в:
верхнее меню → Project → Properties... → Output → Test Movie → Run custom command → Edit → вписать без изменений:
"C:\Program Files\Mozilla Firefox\firefox.exe";"$(OutputDir)\$(OutputName)"
Подключение swc библиотеки:
Project → Properties... → Compiler Options → в одном из (External Links, SWC Include Libraries, SWC Libraries) указать путь к библиотеке.
пример в картинках
отладка в web
запуск трейсера под firefox:1) установить flash tracer (с официального сайта)
2) установить debug версию flash player
3) в опциях flash tracer указать расположение лог-фала (там написано, где должно лежать)
вывести подробную информацию об объекте в окно трейсера
trace( ObjectUtil.toString(_itemsIndex) );
Основные моменты
Application
Application - это основной объект программы (типа, "главное окно"). В программе может быть только один такой объект.
В Air такой объект называется WindowedApplication.
Приложение и компоненты можно описывать с помощью mxml или с помощью AcrionScript.
mxml
у любого элемента в разметке mxml можно указать id:<mx:DataGrid id="asf">
тогда к нему можно будет обратиться из кода flex как к объекту с именем asf
ActionScript
создание объектов
var a:Button = new Button(); // объект создан, но он ещё не размещён на страницеeditPanel.addChild(a); // размещаем объект внутри какого-то уже отображённого контейнера
includeInLayout | bool | занимает ли объект место в разметке странице |
display | bool | отображается ли объект |
Базовые классы Flex
Тут перечислены только те классы, которые есть во Flex, но отсутствуют в ActionScript.ArrayCollection
ArrayCollection([{"aa":11, "bb":"qwq"},{"aa":22, "bb":"asd"}]);ArryaCollection - это класс, который наследуется от Array. В нём есть дополнительный возможности. В частности - сортировка. Пример:
sort.fields = [new SortField("age", false)];
coll.sor = sort;
coll.refresh();
XML
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/XML.htmlxml.attribute("attrName"); // получить значение xml-атрибута по его имени
то же самое можно получить как:
xml.@attrName;
xml.elements(); // список вложенных элементов XML
xml.children(); // список вложенных элементов с учётом сортировки
xml.toXMLString(); // получить xml в виде строки
задать новое значение атрибуту XML
xml.attribute( attrName )[0] = new XML( newValue );
XMLList
это список объектов XML. на сколько понимаю, через этот объект можно работать с коллекцией XML, находящихся внутри списка.HTTPService
Объект для отправки формpublicHTTPService = new HTTPService();
publicHTTPService.url = url;
if(params) {
for (var param:String in params) {
publicHTTPService.request[param] = params[param];
};
};
publicHTTPService.addEventListener(ResultEvent.RESULT, resultFunction);
publicHTTPService.addEventListener(FaultEvent.FAULT, stepByStepRequestFault);
publicHTTPService.send();
cursorManager.setBusyCursor();
}
Переменные окружения (url и пр.)
Путь к текущему исполняемому файлу swf доступен через this.url (видимо не доступен из подключаемых компонентов приложения).Передать параметры из html во flash
<object id='mySwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab' height='100%' width='100%'><param name='src' value='FlashVarTest.swf'/>
<param name='flashVars' value='firstName=Nick&lastName=Danger'/>
<embed name='mySwf' src='FlashVarTest.swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='100%' width='100%' flashVars='firstName=Nick&lastName=Danger'/>
</object>
статья в документации Adobe называется "Passing request data with URL fragments"
Менеджеры
PopUpManager
класс для управления всплывающими окнамиhttp://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=layouts_065_45.html
Полезные функции
private function a2():void{
var bbb:TextLineMetrics = measureText( aaa.text );
Alert.show( bbb.width.toString() );
}
Взаимодействие с javascript
получить текущий путь
trace( ExternalInterface.call("window.location.href.toString") );вроде бы этот класс позволяет вызывать любые функции javascript
Полезные функции
print_r
некоторые простенькие объекты может обработать, но, видимо, далеко не всеif (indent == "") {
indent = " ";
} else {
indent += " ";
}
if(theObj is Array || theObj is Object) {
for(var p:Object in theObj){
if(theObj[p] is Array|| theObj[p] is Object){
trace("\n"+indent+"["+p+"]("+typeof(theObj[p])+")=>");
print_r(theObj[p],indent);
} else {
trace("\n"+indent+"["+p+"]:"+theObj[p]);
}
}
}
trace(String(theObj));
}
nextHi
{
var prefix:String;
var endPart:String;
var index:int = hi.lastIndexOf(".");
if(index == -1){
endPart = hi;
prefix = '';
} else {
prefix = hi.substr(0, index + 1);
endPart = hi.substr(index+1);
}
endPart = String(Number(endPart.substr(1))+1);
return prefix + (endPart.length - 1) + endPart;
}