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