2012г.
Количество страниц: 752
Adobe Flex - технология создания веб-приложений с широкими возможностями. С выходом Flex 4 создатели получили в свое распоряжение новые компоненты интерфейса пользователя, более совершенный механизм мониторинга производительности и более быстрый компилятор. Эта книга Flex 4 в действии. Ахмед представляет собою исчерпывающее руководство, при помощи которого веб-дизайнеры и создатели могут исследовать Flex. Издание начинается с рассмотрения основ - форм и данных, - затем нужно материал, касающийся ключевых концепций: навигации, перетаскивания элементов с помощью мыши, событий. Если вы не знакомы с Flex, то эта книга - все, что вам понадобится, чтоб научиться делать Flex-приложения с использованием новых компонентов Spark, служб данных, диаграмм, специальных эффектов и многого иного. В этой книжке рассмотрены следующие тематики: ¦ создание своих приложений; ¦ применение диаграмм для разработки интерактивных информационных панелей; ¦ увеличение производительности приложений при помощи эксплуатации инструментария для сетевого мониторинга и проведения модульного тестирования; ¦ придание приложениям уникального внешнего вида с помощью тем и скинов.
Оглавление книги
Книга Flex 4 в действии. Ахмед
Предисловие к первому изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
О книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Краткое содержание глав . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Загрузка образов программного кода и используемые
в книге соглашения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
О названии книги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Об иллюстрации на обложке книги . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Часть I. Основы создания приложений
Глава 1. Вводный этап . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1 .1 . Почему существует так много веб-приложений? . . . . . . . . . . . . . . . . 44
1 .2 . Содержательные интернет-приложения как решение . . . . . . . . . . . . 47
1 .2 .1 . Это нужно всем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1 .2 .2 . Содержательные интернет-приложения приходят
на помощь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1 .2 .3 . Как содержательные интернет-приложения позволяют
добиваться таких результатов . . . . . . . . . . . . . . . . . . . . . . . . . 49
1 .3 . Конкуренты содержательных интернет-приложений . . . . . . . . . . . . . 49
1 .3 .1 . Технология Flex от компании Adobe . . . . . . . . . . . . . . . . . . . 50
1 .3 .2 . Технология Silverlight от компании Microsoft . . . . . . . . . . . . 51
1 .3 .3 . Технология JavaFX от компании Sun Microsystems . . . . . . . . 52
1 .3 .4 . Технология AJAX — последний конкурент . . . . . . . . . . . . . . 52
1 .4 . Знакомство с Flex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1 .4 .1 . Использование преимуществ Adobe Flash . . . . . . . . . . . . . . . 56
1 .4 .2 . Совместимость Flex и JavaScript . . . . . . . . . . . . . . . . . . . . . . 57
1 .4 .3 . Экосистема Flex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1 .5 . Как работает Flex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1 .5 .1 . Языки, поддерживаемые Flex . . . . . . . . . . . . . . . . . . . . . . . 61
1 .5 .2 . События, события, события . . . . . . . . . . . . . . . . . . . . . . . . . 63
1 .5 .3 . Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1 .6 . Что нового появилось в Flex 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
1 .7 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Глава 2. Приступаем к работе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2 .1 . Flex «по дешевке» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2 .1 .1 . Конфигурирование среды компилирования . . . . . . . . . . . . . 70
2 .1 .2 . Конфигурирование среды редактирования . . . . . . . . . . . . . 72
2 .1 .3 . Последующие шаги (если вам еще интересно) . . . . . . . . . . . 73
2 .2 . Знакомимся с Flash Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2 .2 .1 . Программные продукты и ценовая политика . . . . . . . . . . . . 75
2 .2 .2 . Загрузка и установка Flash Builder . . . . . . . . . . . . . . . . . . . . 76
2 .3 . Исследуем Flash Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2 .4 . Представления и перспективы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2 .4 .1 . Встроенные перспективы . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2 .4 .2 . Переключение между перспективами . . . . . . . . . . . . . . . . . 79
2 .4 .3 . Конфигурирование перспектив . . . . . . . . . . . . . . . . . . . . . . 80
2 .5 . Наш первый проект — Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2 .5 .1 . Создаем проект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2 .5 .2 . Печатаем код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2 .5 .3 . Компилирование и запуск . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2 .5 .4 . Добавляем реальную функциональность . . . . . . . . . . . . . . . 85
2 .6 . Использование режима Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2 .7 . Встроенный справочник API Reference . . . . . . . . . . . . . . . . . . . . . . . . 87
2 .7 .1 . Объектно-ориентированные языки и их справочники
API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
2 .7 .2 . Как получить доступ к справочнику API Reference . . . . . . . . 88
2 .7 .3 . Чтение справочника API Reference . . . . . . . . . . . . . . . . . . . . 90
2 .8 . Кратко о MXML и ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2 .8 .1 . Структура MXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2 .8 .2 . Взаимоотношения MXML с ActionScript . . . . . . . . . . . . . . . . . 93
2 .8 .3 . ActionScript отвечает за обработку событий . . . . . . . . . . . . . 94
2 .9 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Глава 3. Работа с ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3 .1 . Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3 .1 .1 . Встроенные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . 100
3 .1 .2 . Блочные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3 .2 . Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3 .2 .1 . Имена переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3 .2 .2 . Строгая типизация данных . . . . . . . . . . . . . . . . . . . . . . . . 101
3 .2 .3 . Статическая и динамическая проверка типа . . . . . . . . . . . 101
3 .2 .4 . Классы верхнего уровня . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3 .2 .5 . Специальные типы данных . . . . . . . . . . . . . . . . . . . . . . . . 103
3 .3 . Циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3 .3 .1 . For (начальное значение; соответствующее условие;
инкремент) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3 .3 .2 . For (имена свойств в массиве/объекте) . . . . . . . . . . . . . . . 104
3 .3 .3 . For each (элемент в массиве/объекте) . . . . . . . . . . . . . . . . 105
3 .3 .4 . While (условие) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3 .3 .5 . Do while (условие) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3 .4 . Условные операторы (операторы if и switch) . . . . . . . . . . . . . . . . . . 107
3 .4 .1 . If . .else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3 .4 .2 . Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3 .5 . Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3 .5 .1 . Индексированные массивы . . . . . . . . . . . . . . . . . . . . . . . . 111
3 .5 .2 . Ассоциативные массивы . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3 .6 . Аспекты, касающиеся ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3 .6 .1 . Скобки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3 .6 .2 . Логические операторы и сокращения . . . . . . . . . . . . . . . . 116
3 .7 . Взгляд на функции, классы и пакеты . . . . . . . . . . . . . . . . . . . . . . . . 118
3 .7 .1 . Ваши собственные функции . . . . . . . . . . . . . . . . . . . . . . . . 119
3 .7 .2 . Отделение ActionScript-кода и размещение его
в обособленных файлах . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3 .8 . Простая привязка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3 .8 .1 . Жизнь без привязки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3 .8 .2 . Добавление привязки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3 .8 .3 . Тег . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3 .8 .4 . Делаем переменные ActionScript привязываемыми . . . . . . . 126
3 .9 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Глава 4. Макет и контейнеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4 .1 . Сравнение Spark и Halo (MX) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4 .2 . Макет, предусматривающий абсолютное позиционирование . . . . . . 131
4 .3 . Макет на основе ограничений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4 .3 .1 . Базовые ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
4 .3 .2 . Дополнительные ограничения . . . . . . . . . . . . . . . . . . . . . . 137
4 .4 . Макет, предусматривающий автоматическое позиционирование . . . 144
4 .4 .1 . Использование классов макетов . . . . . . . . . . . . . . . . . . . . 144
4 .4 .2 . Установление промежутков . . . . . . . . . . . . . . . . . . . . . . . . 146
4 .5 . Установление переменных и фиксированных размеров . . . . . . . . . . 147
4 .5 .1 . Установление переменных размеров . . . . . . . . . . . . . . . . . 147
4 .5 .2 . Установление фиксированных размеров . . . . . . . . . . . . . . 148
4 .6 . Контейнеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
4 .6 .1 . Контейнер Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
4 .6 .2 . Контейнер Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4 .6 .3 . Контейнеры Group и SkinnableContainer . . . . . . . . . . . . . . . 151
4 .6 .4 . Контейнер Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
4 .6 .5 . Контейнер ApplicationControlBar . . . . . . . . . . . . . . . . . . . . . 154
4 .6 .6 . Контейнеры DataGroup и SkinnableDataContainer . . . . . . . . 156
4 .6 .7 . Контейнеры DividedBox, HDividedBox и VDividedBox . . . . . . 158
4 .6 .8 . Контейнер Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
4 .6 .9 . Контейнер Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
4 .7 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Глава 5. Отображение форм и захват вводимых
пользователем данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5 .1 . Атрибут id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5 .2 . Каталог элементов управления Flex . . . . . . . . . . . . . . . . . . . . . . . . . 165
5 .2 .1 . Текстовые элементы управления . . . . . . . . . . . . . . . . . . . . 165
5 .2 .2 . Date-элементы управления . . . . . . . . . . . . . . . . . . . . . . . . 169
5 .2 .3 . Элементы управления для захвата числовых значений . . . 171
5 .2 .4 . Обзор кнопок Flex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5 .2 .5 . Элементы управления со списками выбора . . . . . . . . . . . . 180
5 .3 . Доступ к значению элемента управления . . . . . . . . . . . . . . . . . . . . 183
5 .3 .1 . Передача значений функции . . . . . . . . . . . . . . . . . . . . . . . 183
5 .3 .2 . Передача событий функции . . . . . . . . . . . . . . . . . . . . . . . . 18
5 .3 .3 . Прямой доступ к свойствам . . . . . . . . . . . . . . . . . . . . . . . . 186
5 .3 .4 . Какой подход следует предпочесть . . . . . . . . . . . . . . . . . . 187
5 .4 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Глава 6. Проверка вводимых пользователем данных . . . . . . . . . . 189
6 .1 . Обзор способов проверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
6 .2 . Встроенные валидаторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6 .2 .1 . Компонент Validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
6 .2 .2 . StringValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
6 .2 .3 . NumberValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6 .2 .4 . DateValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6 .2 .5 . EmailValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
6 .2 .6 . CreditCardValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6 .2 .7 . CurrencyValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
6 .2 .8 . PhoneNumberValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
6 .2 .9 . RegExpValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
6 .2 .10 . SocialSecurityValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
6 .2 .11 . ZipCodeValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
6 .3 . Проверка в реальном времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
6 .4 . Проверка при фиксации значения . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6 .5 . Сквозная проверка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6 .6 . Сценарная проверка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
6 .7 . Аспекты, касающиеся проверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
6 .7 .1 . Всегда ли валидатор проверяет соответствие
всем критериям? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
6 .7 .2 . Контроль над тем, что инициирует проверку . . . . . . . . . . . 211
6 .8 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Глава 7. Форматирование данных . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
7 .1 . Встроенные форматеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
7 .1 .1 . Formatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
7 .1 .2 . NumberFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
7 .1 .3 . CurrencyFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
7 .1 .4 . DateFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
7 .1 .5 . PhoneFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
7 .1 .6 . ZipCodeFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
7 .1 .7 . SwitchSymbolFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7 .2 . Форматирование в реальном времени . . . . . . . . . . . . . . . . . . . . . . . 226
7 .3 . Сценарное форматирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
7 .3 .1 . Использование функции в сочетании с компонентом
в виде форматера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
7 .3 .2 . Использование функции в сочетании
с классом форматера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
7 .4 . Выявление ошибок форматирования с целью
их последующего устранения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
7 .5 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Глава 8. MX-компоненты DataGrid, List и Tree . . . . . . . . . . . . . . . . . 232
8 .1 . Генеалогия основанных на списке компонентов MX . . . . . . . . . . . . . 232
8 .1 .1 . Свойства, поддерживаемые ListBase и AdvancedListBase . . . 233
8 .1 .2 . События, поддерживаемые MX-компонентом ListBase . . . . . 235
8 .2 . Понятие коллекций и dataProvider . . . . . . . . . . . . . . . . . . . . . . . . . . 235
8 .2 .1 . Заполнение dataProvider . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8 .2 .2 . Типы коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8 .2 .3 . Компоненты, использующие коллекции . . . . . . . . . . . . . . . 237
8 .3 . Инициализация коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8 .4 . Заполнение коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
8 .4 .1 . List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
8 .4 .2 . HorizontalList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
8 .4 .3 . TileList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
8 .4 .4 . DataGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
8 .4 .5 . Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
8 .5 . Взаимодействие с основанными на списке компонентами MX . . . . . . 253
8 .5 .1 . События, связанные с основанными
на списке компонентами . . . . . . . . . . . . . . . . . . . . . . . . . . 253
8 .5 .2 . Передача события функции . . . . . . . . . . . . . . . . . . . . . . . . 254
8 .5 .3 . Передача данных функции . . . . . . . . . . . . . . . . . . . . . . . . 256
8 .5 .4 . Прямой доступ к выбранной строке . . . . . . . . . . . . . . . . . . 257
8 .5 .5 . Привязка к выбранной строке . . . . . . . . . . . . . . . . . . . . . . 257
8 .6 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Глава 9. Использование основанных на списке элементов
управления Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
9 .1 . Генеалогия основанных на списке компонентов Spark . . . . . . . . . . . 260
9 .1 .1 . Идентификация соответствующего компонента
с использованием пространств имен . . . . . . . . . . . . . . . . . 26
9 .1 .2 . Рендереры элементов и основанные
на списке компоненты Spark . . . . . . . . . . . . . . . . . . . . . . . 261
9 .2 . Основанные на списке элементы управления Spark . . . . . . . . . . . . . 261
9 .2 .1 . Элемент управления ButtonBar . . . . . . . . . . . . . . . . . . . . . 262
9 .2 .2 . Spark-элемент управления List . . . . . . . . . . . . . . . . . . . . . . 263
9 .2 .3 . Элемент управления DropDownList . . . . . . . . . . . . . . . . . . 264
9 .3 . Взаимодействие с основанными на списке компонентами Spark . . . . 266
9 .3 .1 . Отправка событий по умолчанию при выборе элемента . . . 266
9 .3 .2 . Объект IndexChangedEvent . . . . . . . . . . . . . . . . . . . . . . . . 267
9 .4 . Понятие архитектуры основанных на списке компонентов Spark,
поддерживаемых версией Flex 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9 .4 .1 . Иерархия классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9 .4 .2 . Новые Spark-классы для основанных на списке
элементов управления . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
9 .5 . Создание пользовательских основанных на списке компонентов
на базе архитектуры Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
9 .5 .1 . Понятие классов Group и SkinnableContainer . . . . . . . . . . . . 270
9 .5 .2 . Создание пользовательского основанного
на списке компонента Spark на базе класса List . . . . . . . . . 271
9 .6 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Глава 10. Конфигурирование основанных
на списке компонентов Spark . . . . . . . . . . . . . . . . . . . . . . 275
10 .1 . Конфигурирование отображения данных . . . . . . . . . . . . . . . . . . . . 275
10 .1 .1 . Свойство labelField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
10 .1 .2 . Функции метки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
10 .1 .3 . Типы функций метки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10 .1 .4 . Использование функций метки, предназначенных
для многостолбцовых основанных
на списке компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10 .1 .5 . Для чего могут применяться функции метки . . . . . . . . . . 282
10 .1 .6 . Более общая картина . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
10 .2 . Рендереры элементов (средства визуализации элементов) . . . . . . . 283
10 .2 .1 . Spark-рендереры элементов MXML . . . . . . . . . . . . . . . . . . 283
10 .2 .2 . Spark-рендереры элементов MXML
с использованием компонентов MX . . . . . . . . . . . . . . . . . 285
10 .2 .3 . Создание встроенного рендерера элементов . . . . . . . . . . 289
10 .2 .4 . Использование вставных рендереров элементов . . . . . . . 289
10 .3 . Редакторы элементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10 .3 .1 . Активация опции редактирования элементов . . . . . . . . . . 292
10 .3 .2 . Создание редактора элементов . . . . . . . . . . . . . . . . . . . . 294
10 .3 .3 . События, инициируемые во время процесса
редактирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
10 .3 .4 . Объединяем силы: rendererIsEditor . . . . . . . . . . . . . . . . . . 297
10 .4 . Продвинутые редакторы элементов . . . . . . . . . . . . . . . . . . . . . . . . 298
10 .4 .1 . AdvancedDataGridRendererProvider . . . . . . . . . . . . . . . . . . 299
10 .4 .2 . Ссылка на столбец . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
10 .4 .3 . Охват столбцов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
10 .4 .4 . Охват строки целиком . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
10 .5 . Функции фильтрации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
10 .6 . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Часть II. Поток и структура приложения
Глава 11. События . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
11 .1 . Система событий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
11 .1 .1 . Система событий — принцип Голливуда . . . . . . . . . . . . . . 311
11 .1 .2 . Система доставки событий . . . . . . . . . . . . . . . . . . . . . . . . 311
11 .2 . Отправка и получение событий . . . . . . . . . . . . . . . &nbs