第Ⅰ部分 Flex概述 3
第1章 使用Flex的理由 3
1.1 Flex的含义 3
1.2 RIA的含义 3
1.3 受欢迎的Flex 6
1.3.1 揭秘Flash和Flex 7
1.3.2 用户喜爱Flex的十大理由 11
1.4 本章小结 14
第2章 Flex 3生态系统 15
2.1 Flex历史简介 15
2.2 Adobe Flex 3生态系统 17
2.2.1 运行时 17
2.2.2 语言 23
2.2.3 框架和API 26
2.2.4 数据通信 28
2.2.5 服务器 29
2.3 Adobe Flex RIA工作流程 31
2.3.1 设计与开发 32
2.3.2 运行 32
2.3.3 通信 33
2.3.4 基本设施 33
2.4 Flex生态系统未来的扩展 33
2.5 本章小结 34
第3章 ActionScript 3.0基础 35
3.1 核心语言概念 35
3.1.1 基本语法 35
3.1.2 保留关键字 36
3.1.3 变量和数据类型 37
3.2 控制结构 37
3.2.1 条件语句 37
3.2.2 循环 39
3.3 使用类和数据类型 40
3.3.1 值类型 40
3.3.2 数字型 41
3.3.3 字符串 42
3.3.4 数组 43
3.3.5 向量 45
3.3.6 对象 45
3.3.7 类型转换 46
3.3.8 自检 47
3.4 面向对象编程 49
3.4.1 Obiect类 50
3.4.2 包和类 50
3.4.3 类特性 51
3.4.4 类成员 51
3.4.5 接口和继承 56
3.5 本章小结 57
第4章 运用ActionScript 3.0 58
4.1 Flash平台框架 58
4.2 显示编程 59
4.3 事件模型 59
4.3.1 事件类和类型 60
4.3.2 事件进程 60
4.3.3 事件流 62
4.3.4 EventDispatcher类 62
4.4 Flash Player API 63
4.4.1 Display API 63
4.4.2 Flash AIR的API 67
4.4.3 Flash 10的API 68
4.5 本章小结 72
第5章 Flex Builder 3 73
5.1 Flex Builder入r 73
5.1.1 Flex Builder和Eclipse 74
5.1.2 学习Flex和获取帮助 74
5.2 Flex Builder 3工作台 78
5.2.1 工作区 79
5.2.2 创建和交换工作区 79
5.2.3 工作区配置 79
5.2.4 编辑器 80
5.2.5 视图 80
5.2.6 透视图 81
5.2.7 创建自定义透视图 84
5.3 Flex Builder 3中的新内容 84
5.3.1 新向导 84
5.3.2 设计模式的增强 84
5.3.3 开发功能的增强 84
5.3.4 CS3套件的整合 85
5.4 本章小结 85
第Ⅱ部分 使用Flex 3开发应用程序第6章 使用Flex Builder 3 89
6.1 Flex编译过程 89
6.1.1 开发 89
6.1.2 编译 90
6.1.3 发布 91
6.2 关于项目 91
6.3 创建Flex应用程序 93
6.3.1 创建一个Flex项目 93
6.3.2 使用设计模式 95
6.3.3 使用数据绑定 100
6.3.4 使用触发器和特效 101
6.3.5 编译应用程序 101
6.4 创建ActionScript应用程序 102
6.4.1 创建ActionScript项目 102
6.4.2 比较文件大小 105
6.5 非正式的SWF元数据标记 105
6.6 本章小结 107
第7章 MXML基础 108
7.1 语言原则 108
7.1.1 MXML是XML 108
7.1.2 命名约定 108
7.1.3 MXML语法 109
7.1.4 显示层次 109
7.1.5 MXML名称空间 110
7.2 使用MXML 113
7.2.1 MXML标签 113
7.2.2 MXML属性 115
7.2.3 使用MXML和CSS 119
7.2.4 使用MXML和ActionScript 120
7.3 本章小结 127
第8章 使用Flex Builder 3进行开发 128
8.1 项目管理 128
8.1.1 项目属性 128
8.1.2 导出项目 132
8.1.3 导入项目 132
8.1.4 导航项目 134
8.2 创建应用程序 139
8.2.1 创建调试版本 139
8.2.2 创建导出版本 140
8.2.3 激活源视图 141
8.3 语言智能 144
8.3.1 编辑代码 144
8.3.2 代码参数 146
8.3.3 代码自检 146
8.3.4 键盘快捷键 148
8.4 本章小结 149
第9章 自定义Flex Builder 3 150
9.1 优化Flex Builder性能 150
9.1.1 项目开发的最佳实践 150
9.1.2 Eclipse的性能管理 152
9.2 定制工作台 156
9.2.1 编辑工作区列表 156
9.2.2 使用自定义快捷方式 157
9.2.3 高效的布局 158
9.2.4 管理工作区首选项 159
9.3 使用Flex Builder代码库 160
9.3.1 使用本地历史数据 160
9.3.2 用于Subversion源代码管理的Subclipse插件 162
9.3.3 分离本地项目 177
9.4 本章小结 181
第Ⅲ部分 使用组件 185
第10章 组件的生命周期和类的层次结构 185
10.1 Flex应用程序中Flash的作用 185
10.2 Flex框架的生命周期 186
10.2.1 逐帧 186
10.2.2 生命周期 187
10.3 Flex类的层次 189
10.3.1 Flash和Flex类的程序包 189
10.3.2 UIComponent 189
10.3.3 容器类 191
10.3.4 List类 192
10.3.5 Formatters类、Validators类和Collection类 192
10.3.6 框架的功能和事件 194
10.4 本章小结 195
第11章 数据绑定和事件的使用 196
11.1 使用花括号{} 196
11.2 [Bindable]元数据 199
11.3 事件 200
11.3.1 捕获阶段 201
11.3.2 目标阶段 201
11.3.3 冒泡处理阶段 202
11.4 终止事件 202
11.5 事件侦听器 203
11.5.1 使用MXML 204
11.5.2 使用ActionScript 204
11.6 事件类型 205
11.7 自定义事件 205
11.7.1 创建自定义事件 205
11.7.2 [Event]元数据 206
11.7.3 使用自定义事件的策略 207
11.8 本章小结 208
第12章 用户接口控件与容器 209
12.1 静态控件 209
12.1.1 mx.controls.Label与mx.controls.Text 209
12.1.2 mx.controls.Image 209
12.1.3 mx.controls.SWFLoader 210
12.1.4 mx.controls.HRule和mx.controls.VRule 211
12.1.5 mx.controls.ProgressBar 211
12.2 输入控件 212
12.2.1 mx.controls.Button和mx.controls.LinkButton 212
12.2.2 mx.controls.TextInput与mx.controls.TextArea 212
12.2.3 mx.controls.NumericStepper 213
12.2.4 mx.controls.DateChooser and mx.controls.DateField 213
12.2.5 mx.controls.CheckBox 214
12.2.6 mx.controls.ComboBox 214
12.2.7 mx.controls.RadioButton and mx.controls.RadioButton-Group 215
12.2.8 mx.controls.HSlider和mx.controls.VSlider 216
12.2.9 mx.controls.RichTextEditor 216
12.2.10 mx.controls.PopUpButton 217
12.2.11 mx.controls.PopUpMenuButton 218
12.2.12 mx.controls.ColorPicker 218
12.3 布局容器 219
12.3.1 mx.containers.Canvas 219
12.3.2 mx.container.VBox和mx.container.HBox 220
12.3.3 mx.containers.HDividedBox和mx.containersVDividedBox 220
12.3.4 mx.core.Application、mx.containers.Panel以及mx.containers.TitleWindow 221
12.3.5 mx.containers.Grid 222
12.3.6 mx.containers.Tile 224
12.3.7 mx.containers.Form 225
12.3.8 mx.containers.ControlBar 226
12.3.9 mx.containers.Application-ControlBar 226
12.4 导航组件 227
12.4.1 创建策略 227
12.4.2 mx.containers.Accordion 227
12.4.3 mx.containers.TabNavigator 228
12.4.4 mx.containers.ViewStack 229
12.4.5 mx.controls.LinkBar 230
12.4.6 mx.controls.TabBar 230
12.4.7 mx.containers.MenuBar与mx.controls.Menu 230
12.4.8 mx.controls.ButtonBar和mx.controls.ToggeButtonBar 231
12.5 列表控件 232
12.6 本章小结 233
第13章 布局策略 234
13.1 坐标定位 234
13.2 约束定位 234
13.3 用百分比定位 236
13.4 对齐定位 237
13.5 高级约束 238
13.5.1 ConstraintColumns(列约束) 239
13.5.2 ConstraintRows(行约束) 240
13.5.3 ActionScript中的约束 240
13.5.4 约束规格 241
13.6 使用includeInLayout 241
13.7 性能注意事项 242
13.8 本章小结 242
第14章 用户界面的整合 243
14.1 创建表单 243
14.1.1 提交表单内容 246
14.1.2 使用Flex Builder设计视图构建表单 247
14.1.3 设置表单上的defaultButton(默认按钮) 247
14.2 自定义提示条 248
14.3 构建弹出控件 250
14.3.1 警告 250
14.3.2 使用PopUpManager 252
14.3.3 与弹出式控件交互 254
14.4 自定义光标 256
14.4.1 光标管理 256
14.4.2 忙碌状态的光标 256
14.4.3 手形光标 257
14.4.4 自定义光标 257
14.5 本章小结 258
第15章 AIR入门 259
15.1 AIR的用途 259
15.1.1 使用AIR的原因 260
15.1.2 使用AIR构建的应用程序 260
15.1.3 AIR的需求 260
15.2 构建AIR应用程序 262
15.2.1 IntroToAIR.mxml文件 262
15.2.2 IntroToAIR-app.xml描述文件 263
15.3 AIR配置文件 264
15.4 创建一个AIR应用程序(第Ⅱ部分) 268
15.4.1 修改IntroToAIR.mxml窗口 268
15.4.2 MainWindow.mxml文件 270
15.4.3 IntroToAIR-app.xml描述文件 271
15.5 本章小结 273
第Ⅳ部分 高级组件开发 277
第16章 自定义ActionScript组件 277
16.1 企业商标示例 278
16.1.1 UIComponent和IUIComponent 278
16.1.2 CompanyLogo.as 278
16.2 组件结构 280
16.2.1 组件属性和Flex框架生命周期 281
16.2.2 无效函数 281
16.2.3 添加子组件 282
16.2.4 使用invalidateProperties()函数并且将属性应用到组件中 283
16.2.5 测量组件 284
16.2.6 组件布局 285
16.2.7 为组件选择基类 287
16.2.8 设置子组件的大小 288
16.3 RockerSwitch示例 290
16.4 本章小结 297
第17章 自定义MXML组件 298
17.1 MXML与ActionScript组件 298
17.2 定制布局 299
17.2.1 重写updateDisplayList()函数 299
17.2.2 重写layoutChrome()函数 301
17.2.3 创建元数据标签 302
17.3 构建模板组件 303
17.3.1 DefaultProperty元标签 304
17.3.2 构建自定义子组件 305
17.4 扩展MXML组件 305
17.5 本章小结 306
第18章 扩展Flex组件 307
18.1 复合组件浅析 307
18.2 构建复合组件 308
18.2.1 属性 308
18.2.2 事件 309
18.2.3 布局 311
18.3 扩展现有组件 311
18.3.1 扩展Button 311
18.3.2 扩展TextInput 313
18.3.3 扩展UIComponent与标准组件 314
18.3.4 外观和行为 314
18.4 自定义容器 315
18.4.1 应用Flex组件生命周期 316
18.4.2 标签云 316
18.4.3 自定义复合组件 318
18.5 本章小结 320
第19章 高级事件编程 321
19.1 自定义事件与标准事件 321
19.1.1 继承标准事件 323
19.1.2 一个与多个 323
19.2 向AS类和MXML文件添加元数据 323
19.2.1 为自定义组件添加自定义事件 324
19.2.2 处理事件运行时错误 324
19.3 事件流 325
19.3.1 事件优先级 325
19.3.2 阻止或更改默认行为 325
19.3.3 转发事件 326
19.4 自定义数据绑定 328
19.4.1 使用可绑定的元数据标签 328
19.4.2 自定义数据绑定与可绑定的元数据标签 328
19.5 使用BindingUtils 331
19.5.1 ActionScript中自定义的数据绑定 331
19.5.2 ChangeWatcher 332
19.6 本章小结 332
第20章 状态管理 334
20.1 状态的概念 334
20.2 添加States属性 335
20.2.1 使用Flex Builder的Design View创建States属性 335
20.2.2 更改States属性 337
20.2.3 测试示例 337
20.3 MXML标签 338
20.3.1 添加组件 338
20.3.2 删除组件 339
20.3.3 消失,但却没有销毁 339
20.3.4 设置和更改属性与样式 340
20.3.5 更改事件处理程序 340
20.3.6 数据绑定 341
20.4 在ActionScript中创建状态 341
20.5 真实的状态管理 343
20.6 常见问题 343
20.6.1 States与ViewStack 343
20.6.2 优化 344
20.7 本章小结 345
第21章 库的应用 347
21.1 ActionScript库 347
21.1.1 Flash Player库 347
21.1.2 Flex库 348
21.2 SWC和SWF 348
21.3 使用Flex Builder创建库 349
21.3.1 创建库项目 349
21.3.2 添加资源 350
21.3.3 创建SWC 350
21.4 使用COMPC创建库 351
21.4.1 COMPC选项 352
21.4.2 添加资源 352
21.4.3 指定清单文件 352
21.5 针对组件库的最佳实践 353
21.5.1 共享源目录 353
21.5.2 建立后进行销售 354
21.6 应用库 354
21.6.1 libs文件夹 354
21.6.2 构建路径 354
21.6.3 利用库中的资源 355
21.6.4 使用SWC文件 356
21.7 本章小结 356
第Ⅴ部分 可视化效果与多媒体 359
第22章 样式 359
22.1 CSS样式 359
22.1.1 内联样式与CSS 359
22.1.2 组件样式 361
22.1.3 基于约束的CSS布局 363
22.1.4 CSS样式和类继承 365
22.1.5 CSS样式和子组件 366
22.2 本章小结 369
第23章 皮肤与主题 370
23.1 皮肤的含义 370
23.1.1 嵌入式资源 370
23.1.2 编程皮肤 371
23.1.3 应用皮肤 371
23.1.4 为每个对象定义皮肤 372
23.1.5 在样式表中定义皮肤 373
23.1.6 缩放和九宫网格 374
23.1.7 在运行时更改样式 376
23.2 主题 378
23.2.1 默认的Flex 3主题 379
23.2.2 应用主题 379
23.2.3 创建主题 380
23.2.4 分离主题到库中 380
23.3 本章小结 381
第24章 视觉特效 382
24.1 Flex特效 382
24.1.1 内置的Flex特效 384
24.1.2 应用特效 391
24.1.3 数据特效 392
24.1.4 缓和功能 394
24.1.5 复合特效 394
24.1.6 转场效果 399
24.1.7 特效事件 401
24.1.8 3D特效 402
24.1.9 Flex 4的特效 402
24.2 本章小结 402
第25章 动态皮肤和绘图API 404
25.1 绘图API 404
25.2 可编程的皮肤 413
25.3 额外的绘图API功能 416
25.3.1 遮罩 417
25.3.2 过滤器 418
25.3.3 混合模式 419
25.3.4 Degrafa 419
25.4 本章小结 420
第26章 Flash集成 421
26.1 Flash平台的开发流 421
26.2 Flash-Flex工作流 423
26.3 在Flash中创建Flex组件的皮肤 424
26.4 剥离自定义Flex组件的皮肤 429
26.4.1 规划自定义Flex组件 429
26.4.2 构建Flex组件 430
26.4.3 构建Flash皮肤 432
26.4.4 Flex组件的皮肤 436
26.5 本章小结 439
第27章 加载外部资源 440
27.1 加载图像 440
27.2 SWFLoader类 443
27.3 Loader类 443
27.4 运行时的共享库 448
27.5 本章小结 448
第28章 视频和声音 449
28.1 引进媒体的方法 449
28.1.1 可用的文件格式 449
28.1.2 整合媒体内容 450
28.2 渐进性加载和流 454
28.2.1 Sound类 455
28.2.2 SoundLoaderContext类 455
28.2.3 播放和控制声音 456
28.2.4 访问ID3信息 460
28.2.5 SoundMixer类 462
28.2.6 Microphone类 463
28.3 视频 463
28.3.1 视频类和组件 463
28.3.2 VideoDisplay组件 470
28.3.3 提示点 472
28.3.4 Camera类 472
28.3.5 未存档的视频类 473
28.3.6 Flash Player MovieStar Update 473
28.4 本章小结 477
第29章 高级Flash集成 478
29.1 将Flex类应用到Flash中 478
29.1.1 通过RSL导入Flex自定义类 478
29.1.2 导入本地Flex类 479
29.2 将Flash加载到Flex中 480
29.2.1 适合Flash CS3的Flex Component Kit 480
29.2.2 向Flex中导入Flash本地组件 484
29.2.3 Flex组件的自定义状态和转场效果 488
29.3 本章小结 498
第Ⅵ部分 数据管理 501
第30章 处理数据 501
30.1 XML 501
30.1.1 快速的XML入门 501
30.1.2 XML和ActionScript:在E4X之前 503
30.1.3 XML和ActionScript 3.0:使用E4X 505
30.2 集合API 511
30.2.1 IList 511
30.2.2 ICollectionView 511
30.2.3 ListCollectionView 514
30.3 关联数组/词典 517
30.3.1 使用字符串作为关键字 518
30.3.2 使用对象作为关键字 518
30.4 Repeater 520
30.4.1 执行过程中 520
30.4.2 执行后 521
30.4.3 交互处理 522
30.4.4 不使用Repeater 522
30.5 本章小结 523
第31章 格式化程序与验证器 524
31.1 概述 524
31.2 格式化程序 524
31.2.1 使用标准格式化程序 525
31.2.2 如何处理输入数据错误 528
31.3 验证器 529
31.3.1 使用标准验证器 530
31.3.2 更改默认的错误消息 532
31.3.3 触发验证 533
31.4 ActionScript 3中的正则表达式 534
31.4.1 通用正则表达式用例 534
31.4.2 正则表达式入门 535
31.5 RegExpValidator:验证器的验证器 535
31.6 定制和集中格式化程序、验证器 536
31.6.1 集中格式化程序 536
31.6.2 集中验证器 537
31.7 本章小结 539
第32章 使用列表组件 540
32.1 ListBase无处不在 540
32.2 使用List类 544
32.2.1 列表的项编辑功能 544
32.2.2 子列表 545
32.3 Menu类 546
32.3.1 创建Menu对象 546
32.3.2 使用Menu类 547
32.4 TileBase类 547
32.4.1 HorizontalList类 547
32.4.2 TileList类 548
32.5 List、HorizontalList和TileList优化内存消耗 548
32.6 本章小结 549
第33章 高级数据控件 550
33.1 概述 550
33.2 树型结构 550
33.2.1 给树添加数据 551
33.2.2 改变树的外观 552
33.2.3 应用树型控件 553
33.3 DataGrid 555
33.3.1 填充DataGrid 555
33.3.2 使用列 556
33.3.3 处理事件 557
33.4 定制呈现器 558
33.4.1 定制单元格 558
33.4.2 标题 562
33.5 AdvancedDataGrid 563
33.5.1 实现AdvancedDataGrid 563
33.5.2 在AdvancedDataGrid中对数据分组 564
33.5.3 AdvancedDataGrid中的分层数据 565
33.6 OLAPDataGrid 566
33.6.1 OLAP简介 566
33.6.2 使用OLAPDataGrid 566
33.7 本章小结 570
第34章 Flex中的拖放操作 571
34.1 概述 571
34.2 处理支持拖放的组件 571
34.2.1 使列表能够进行拖放操作 573
34.2.2 移动项 574
34.2.3 避免复制 574
34.3 处理拖放事件 574
34.4 对不支持拖放的组件添加拖放支持 575
34.4.1 将组件设置为拖放初始器 576
34.4.2 将组件设置为释放目标对象 577
34.5 另外一些有关拖放的提示 578
34.5.1 自定义DragSource格式 578
34.5.2 自定义拖动代理 578
34.5.3 保留信息类型 579
34.6 本章小结 579
第35章 在AIR中的拖放 580
35.1 AIR拖放概述 580
35.1.1 Clipboard 580
35.1.2 The NativeDragManager 583
35.2 从AIR应用程序中拖动数据 585
35.2.1 图像中的剪贴板数据 585
35.2.2 延迟数据 588
35.3 向AIR应用程序中拖动文件 588
35.4 本章小结 592
第36章 使用图表组件 593
36.1 理解图表 593
36.1.1 为图表分配数据 593
36.1.2 图表类型 594
36.1.3 图表坐标轴 602
36.1.4 图系列 603
36.1.5 图表数据提示 604
31.1.6 图例 605
36.2 运行时的图表交互 605
36.2.1 处理用户交互 605
36.2.2 编程交互 606
36.3 定制图表的外观 606
36.3.1 自定义渲染器 606
36.3.2 设置样式 607
36.3.3 效果 607
36.4 本章小结 608
第37章 资源包和数据的本地化 609
37.1 概述 609
37.2 使用属性文件的L10n 610
37.2.1 理解属性文件 610
37.2.2 字符编码处理 611
37.2.3 在Flex项目中构建区域设置 612
37.3 在Flex 3中实现i18n 614
37.4 在运行时加载资源 617
37.4.1 资源模块 617
37.4.2 以编程方式生成ResourceBundle 618
37.4.3 资源与模块配对 618
37.5 全球化AIR应用程序 618
37.6 本章小结 619
第Ⅶ部分 客户端通信 623
第38章 Flex中的浏览器通信 623
38.1 了解Web上下文 623
38.2 使用flashVars将数据传递到Flex中 623
38.3 链接到外部页面URL 626
38.4 与JavaScript交互 626
38.4.1 从Flex中调用JavaScript 626
38.4.2 从JavaScript函数调用ActionScript函数 627
38.4.3 在ActionScript和JavaScript之间传递数据 628
38.5 使用Flex-Ajax桥 636
38.6 禁用浏览器集成 637
38.7 本章小结 638
第39章 HTML与AIR的混合 639
39.1 在AIR应用程序中嵌入HTML的理由 639
39.2 YouTube示例 640
39.3 在AIR中显示HTML 640
39.3.1 加载远程内容 640
39.3.2 加载内存中的内容 642
39.3.3 加载本地文件的内容 642
39.4 与JavaScript交互 644
39.4.1 从ActionScript调用嵌入式JavaScript 644
39.4.2 从JavaScript调用ActionScript 646
39.4.3 从ActionScript控制HTML DOM 647
39.5 本章小结 647
第40章 深链接 649
40.1 Web上的深链接 649
40.2 深链接与Flex 649
40.3 Flex 3对深链接的支持 651
40.3.1 使用BrowserManager API 651
40.3.2 在后台:Flex中的深链接如何工作 655
40.4 真实的深链接:空间图像浏览器 656
40.4.1 示例2:使用导航状态 657
40.4.2 实例3:更复杂的图像浏览器 659
40.5 搜索引擎索引和优化 663
40.6 相关的技术和工具 664
40.6.1 SWFAddress 664
40.6.2 UrlKit 665
40.6.3 历史记录管理器 665
40.7 本章小结 666
第41章 Flex中的系统交互 667
41.1 检测客户端系统性能 667
41.2 全屏显示 672
41.3 启用上下文菜单 675
41.3.1 添加和删除上下文菜单选项 675
41.3.2 上下文菜单中的调用操作 678
41.4 系统交互的局限性 681
41.4.1 全屏模式的局限性 681
41.4.2 自定义上下文菜单的局限性 681
41.5 本章小结 682
第42章 利用AIR技术实现本地桌面支持 683
42.1 处理窗口 683
42.1.1 构建本地窗口 683
42.1.2 Native Window Explorer 688
42.2 本地菜单 689
42.2.1 上下文菜单 689
42.2.2 窗口级别与应用程序级别的菜单 695
42.3 与System Tray/Dock交互 697
42.4 检测用户状态 699
42.5 监视网络连接 700
42.6 AIR的性能与Flash运行库 701
42.7 启用全屏模式 702
42.8 本章小结 702
第43章 Local Connection与共享对象 703
43.1 概述 703
43.2 LocalConnection类 703
43.2.1 SWF之间的通信 703
43.2.2 跨域边界 705
43.2.3 使用数据 707
43.2.4 在40KB限制下正常工作 707
43.2.5 标准的LocalConnection错误 707
43.3 使用本地共享对象 708
43.3.1 创建或检索本地共享对象 708
43.3.2 在本地共享对象中存储数据 708
43.3.3 从本地共享对象检索数据 708
43.3.4 显式保存本地共享对象 709
43.3.5 删除属性和销毁本地共享对象 710
43.3.6 补充信息 710
43.3.7 序列化自定义类 713
43.4 本章小结 714
第44章 Flex的文件管理 715
44.1 概述 715
44.2 使用FileReference类 716
44.2.1 处理FileReference类的事件 716
44.2.2 文件上传 717
44.2.3 用FileReference类下载文件 719
44.2.4 取消文件的上传或下载 720
44.3 使用多个文件 720
44.4 服务端需考虑的事项 721
44.5 本章小结 722
第45章 AIR的本地文件管理 723
45.1 文件操作 723
45.1.1 引用目录 723
45.1.2 引用文件 724
45.1.3 导航路径 724
45.2 同步和异步API 725
45.2.1 同步复制文件 726
45.2.2 异步复制文件 727
45.3 其他的文件和目录操作 728
45.3.1 检查存在性 728
45.3.2 删除文件和目录 728
45.3.3 移动文件和目录 729
45.3.4 枚举目录 729
45.3.5 创建临时目录和文件 730
45.4 使用本地文件对话框 730
45.4.1 本地目录浏览器 730
45.4.2 用于打开对话框的本地浏览器 732
45.4.3 打开多个对话框的本地浏览器 733
45.4.4 本地文件保存对话框 734
45.5 读取和写入文件数据 735
45.5.1 将位图数据另存为JPEG文件 735
45.5.2 从文件中读取XML数据 737
45.6 文件系统控件 737
45.7 加密本地数据 739
45.7.1 写入数据 740
45.7.2 读取数据 740
45.7.3 删除数据 740
45.8 本章小结 741
第Ⅷ部分 服务器集成 745
第46章 RPC服务简介 745
46.1 概述 745
46.2 mx.rpc库 746
46.2.1 MXML与ActionScript类之间的差异 747
46.2.3 参数绑定与显式参数传递 748
46.3 使用HTTPService组件 748
46.4 使用WebService组件 750
46.4.1 在MXML中使用WebService 751
46.4.2 把WSDL操作转换为MXML请求 752
46.4.3 在ActionScript中调用WebService 753
46.5 调试远程服务调用 755
46.5.1 网络数据包探查 755
46.5.2 mx.rpc库中的调试跟踪 755
46.6 选择协议与服务器实现 759
46.7 AMF的另一种服务器实现方案 759
46.8 本章小结 760
第47章 错误处理 761
47.1 通过同步代码处理异常 761
47.1.1 Flash Debug Player与Release Player 761
47.1.2 Try/Catch/Finally 762
47.1.3 异常冒泡 764
47.1.4 自定义错误类型 766
47.1.5 THROW 766
47.1.6 函数中的错误处理 767
47.2 事件的异步错误处理 768
47.2.1 重要的错误事件 768
47.2.2 Debug Player中的异步事件 769
47.3 本章小结 770
第48章 Flex和Flash媒体服务器 771
48.1 使用FMS视频流的好处 771
48.2 安装应用程序和了解实例 773
48.3 在Flex中开发FMS 773
48.4 基于FMS理解Netstream类 778
48.5 缓存控制 779
48.6 发布视频 779
48.7 数据流 782
48.8 本章小结 784
第49章 Flex和Zend框架下的REST风格的Web服务 785
49.1 REST风格的Web服务 785
49.2 REST风格的路由示例API 786
49.2.1 设置服务器和开发环境 787
49.2.2 可能需要的客户端软件 789
49.3 Zend框架的工作原理 790
49.4 Flex示例应用程序 792
49.4.1 从一个REST风格的服务中检索数据 793
49.4.2 使用REST风格的服务创建和更新数据 798
49.4.3 从REST风格的服务中删除数据 800
49.5 本章小结 800
第50章 集成Flex和Java 801
50.1 Routes Web Service简介 801
50.2 设置服务器和开发环境 802
50.2.1 服务器端软件需求 802
50.2.2 可能需要的客户端软件 803
50.3 Grails Routes Web Service 804
50.4 Flex示例应用程序 807
50.4.1 RouteService.as服务类 807
50.4.2 使用IResponder 807
50.4.3 使用自定义的服务器端错误 810
50.5 本章小结 814
第51章 .NET与Flex环境下的Web服务 815
51.1 Routes Web Service简介 815
51.2 设置服务器和开发环境 816
51.2.1 服务端软件需求 816
51.2.2 可能需要的客户端软件 817
51.3 .NET Routes Web Service 817
51.4 Flex示例应用程序 821
51.4.1 Import Web Service(WSDL)工具 821
51.4.2 访问Web服务 823
51.4.3 处理自定义的服务器端错误 824
51.5 本章小结 826
第52章 通过AIR访问离线数据 827
52.1 SQLite简介 827
52.2 同步与异步 828
52.3 创建数据库 828
52.3.1 异步打开一个数据库 829
52.3.2 同步打开一个数据库 830
52.3.3 使用数据定义语言 831
52.4 使用数据 833
52.4.1 创建数据 833
52.4.2 检索数据 836
52.4.3 更新数据 836
52.4.4 删除数据 838
52.5 使用事务导入数据 839
52.6 使在线数据可脱机访问 841
52.6.1 向SQLite数据库导入XML 841
52.6.2 为SQLite导入程序改进XML 845
52.7 使用第三方SQLite数据库管理应用程序 846
52.8 本章小结 846
第Ⅸ部分 数据服务 849
第53章 LCDS简介 849
53.1 LCDS概述 849
53.2 理解LCDS 850
53.2.1 数据服务解决方案 851
53.2.2 客户端架构 851
53.2.3 服务器架构 853
53.2.4 服务类型 854
53.2.5 通信通道 856
53.2.6 动作消息格式(AMF) 857
53.3 使用Flex Builder创建LCDS项目 857
53.3.1 新的Flex项目向导 858
53.3.2 配置应用服务器 860
53.4 故障排除 862
53.4.1 日志 862
53.4.2 服务器端调试 863
53.5 本章小结 863
第54章 LCDS与ColdFusion 864
54.1 ColdFusion 8与集成的LCDS 864
54.1.1 LCDS特定ColdFusion安装窗口 864
54.1.2 LCDS特定ColdFusion管理员窗口 866
54.2 事件网关 867
54.2.1 DataServicesMessaging 868
54.2.2 DataManagement 868
54.3 数据管理 868
54.4 本章小结 869
第55章 消息服务 870
55.1 消息服务概述 870
55.2 消息服务技术简介 870
55.2.1 发布与订阅 871
55.2.2 生产者与使用者 871
55.2.3 通过通道传递消息 871
55.2.4 从服务器发布消息 871
55.3 使用消息服务 871
55.3.1 在服务器上配置目标地址 872
55.3.2 在客户端上创建消息 873
55.3.3 发送消息 875
55.3.4 接收消息 876
55.3.5 在MXML中声明生产者和使用者 877
55.3.6 过滤消息 877
55.3.7 检测连接性 878
55.3.8 从服务器发布 879
55.4 消息服务应用程序 881
55.4.1 示例1:聊天室 881
55.4.2 示例2:股票价格监控系统 884
55.4.3 示例3:生成PDF文档 888
55.5 本章小结 894
第56章 数据管理服务 896
56.1 概述 896
56.2 为什么要使用DMS 896
56.2.1 关于域建模 896
56.2.2 创建、读取、更新、删除 897
56.2.3 用户之间的数据共享 897
56.2.4 大数据集的分页 897
56.2.5 偶尔的连接性 898
56.3 眼见为实:Six-Line Demo 898
56.3.1 第1行:声明一个数据服务 899
56.3.2 第2行:为托管数据声明一个集合 899
56.3.3 第3行:为数据网格提供托管数据 900
56.3.4 第4行:填充集合 900
56.3.5 第5行:提交更改和同步客户端 900
56.3.6 第6行:撤销更改 900
56.3.7 后台操作 900
56.4 DMS技术解释 901
56.4.1 客户端组件和服务器组件 901
56.4.2 托管数据 901
56.4.3 托管关系 902
56.4.4 客户端编程 902
56.4.5 服务器集成 904
56.4.6 客户端与服务器端的协作 905
56.5 应用程序示例:DMS Fleet Tracker 905
56.5.1 域建模 905
56.5.2 DMS的配置 908
56.5.3 自定义汇编程序 911
56.5.4 客户端编码 914
56.5.5 进一步的思考 917
56.6 本章小结 917
第57章 高级数据管理服务 918
57.1 DMS概述 918
57.2 概要到细节建模 918
57.3 克服项挂起的错误 920
57.4 管理共享和用户特定的数据 921
57.4.1 一个简单的即时消息系统 921
57.4.2 创建新的MessageDetails项 922
57.4.3 创建和传递用户消息 922
57.4.4 到NIO端点的流式AMF 924
57.5 深入学习 925
57.6 本章小结 926
第58章 Data Service Stress Testing Framework 927
58.1 概述 927
58.2 数据管理服务应用程序的压力测试 928
58.2.1 先决条件 929
58.2.2 编写测试应用程序 929
58.2.3 配置服务器 931
58.2.4 配置和启动浏览器服务器 934
58.2.5 编译Test Administrator 934
58.2.6 运行压力测试 935
58.3 深入讨论 936
58.3.1 参数化测试应用程序 936
58.3.2 预先配置Test Administrator 936
58.3.3 创建定制的测试报告 937
58.4 本章小结 938
第59章 使用BlazeDS 939
59.1 概述 939
59.2 BlazeDS的功能 939
59.2.1 服务器和客户端组件 940
59.2.2 通信通道 941
59.2.3 集成点 941
59.3 开发BlazeDS项目 941
59.3.1 安装BlazeDS即用版 942
59.3.2 创建组合的Flex/Java项目 943
59.3.3 使用远程对象 945
59.3.4 HTTP和Web服务 952
59.4 本章小结 956
第Ⅹ部分 使用Cairngorm 959
第60章 MVC框架 959
60.1 什么是MVC 959
60.2 MVC组件 959
60.2.1 了解数据模型 960
60.2.2 了解视图 960
60.2.3 了解控制器 961
60.2.4 把三者组合在一起 961
60.3 为什么使用MVC 962
60.3.1 抽象 962
60.3.2 组件重用 962
60.3.3 分布式开发 962
60.3.4 维护 963
60.3.5 有最权威的MVC吗 963
60.4 组件架构的MVC方法 963
60.5 本章小结 964
第61章 Cairngorm简介 965
61.1 概述 965
61.2 Cairngorm交互的步骤 965
61.2.1 用户动作 966
61.2.2 分派一个事件 966
61.2.3 命令执行 968
61.2.4 委托业务功能 969
61.2.5 定位和调用一个服务 970
61.2.6 模型的定位和更新 971
61.2.7 变化在视图中的反映 973
61.3 本章小结 975
第62章 Cairngorm应用 976
62.1 概述 976
62.2 主要角色 977
62.3 前端控制器 982
62.3.1 前端控制器的内部构造 982
62.3.2 ShopController 983
62.3.3 声明前端控制器 984
62.4 Caimgorm事件 984
62.4.1 事件类 985
62.4.2 事件类型 985
62.4.3 事件作为参数对象 986
62.4.4 自分派事件 987
62.4.5 Cairngorm命令 987
62.4.6 业务委托 990
62.4.7 在命令中使用业务委托 990
62.4.8 创建业务委托 991
62.4.9 服务定位器 992
62.4.10 值对象 994
62.5 本章小结 997
第63章 高级Cairngorm 998
63.1 表示模型模式 998
63.1.1 使用Caimgorm表示模型 999
63.1.2 Cairngorm表示模型的示例应用程序 1000
63.1.3 域模型 1003
63.1.4 进一步讨论 1003
63.2 组织Caimgorm项目 1003
63.2.1 小型Cairngorm项目 1004
63.2.2 大型Cairngorm项目 1004
63.3 Caimgorm的反模式 1005
63.3.1 胖控制器 1005
63.3.2 废物处理定位器模型 1007
63.3.3 依赖的链 1008
63.4 自定义Cairngorm 1009
63.4.1 记录Cairngorm事件和命令 1009
63.4.2 安排异步命令的执行时间 1010
63.4.3 将依赖性注入命令中 1012
63.4.4 存根服务层 1013
63.4.5 分散控制器 1014
63.4.6 可释放的控制器 1015
63.5 本章小结 1016
第Ⅺ部分 应用程序开发策略 1019
第64章 最佳实践 1019
64.1 编码标准 1019
64.1.1 一致性 1019
64.1.2 清晰性 1019
64.1.3 整洁性 1020
64.2 面向对象的原则 1026
64.2.1 封装 1026
64.2.2 使用公有/私有/受保护的/最终函数 1027
64.2.3 继承 1028
64.2.4 代码隐藏 1035
64.3 本章小结 1036
第65章 安全模型 1037
65.1 了解安全沙箱 1037
65.2 什么是crossdomain.xml 1038
65.2.1 allow-access-from 1039
65.2.2 allow-http-request-headers-from 1040
65.2.3 site-control和元策略 1041
65.3 本地沙箱 1042
65.3.1 local-with-filesystem 1042
65.3.2 local-with-networking 1043
65.3.3 local-trusted 1043
65.4 本章小结 1044
第66章 模块化应用程序开发 1045
66.1 概述 1045
66.2 为什么要进行模块化开发 1046
66.3 构建组件 1046
66.4 运行时共享库 1046
66.5 使用Module类和ModuleLoader类 1047
66.5.1 跨模块通信 1050
66.5.2 跨模块数据访问 1055
66.6 本章小结 1061
第67章 应用程序性能策略 1062
67.1 理解对象的创建策略 1062
67.2 针对性能构建数据 1063
67.2.1 延迟加载数据 1063
67.2.2 多重服务调用的影响 1064
67.3 管理事件侦听器和数据绑定 1064
67.3.1 集合事件 1065
67.3.2 清理无用的事件侦听器 1066
67.3.3 弱引用事件侦听器 1066
67.3.4 手动清理事件侦听器 1067
67.4 关联数组和字典 1068
67.5 使用图形 1069
67.5.1 帧率 1070
67.5.2 使用位图缓存 1070
67.5.3 管理外部SWF内容 1070
67.5.4 对象缓存和回收 1071
67.6 本章小结 1072
第68章 使用ASDoc创建项目文档 1073
68.1 什么是ASDoc 1073
68.2 使用ASDoc 1074
68.3 ASDoc注释和格式 1074
68.3.1 ASDoc标记 1075
68.3.2 类 1076
68.3.3 函数 1076
68.3.4 属性 1077
68.3.5 getter和setter函数 1078
68.3.6 元数据 1080
68.3.7 HTML格式 1080
68.3.8 引用外部元素 1081
68.3.9 排除生成的输出中的类 1082
68.3.10 应用自定义模板 1083
68.4 本章小结 1083
第69章 使用AIR部署桌面 1084
69.1 代码签名和证书 1084
69.1.1 获取证书 1085
69.1.2 在Flex Builder中创建和签名AIR包 1087
69.1.3 使用开发人员证书添加代码签名 1088
69.2 使用命令行打包和为AIR应用程序添加签名 1090
69.3 发布AIR应用程序 1090
69.3.1 Web页面徽章安装 1091
69.3.2 使用Web Badge SDK 1091
69.3.3 自动安装 1094
69.4 更新AIR应用程序 1094
69.5 本章小结 1095
第70章 针对Flex和AIR进行双重部署 1097
70.1 通过接口编码 1097
70.1.1 优点 1099
70.1.2 缺点 1099
70.1.3 构建FlexBuilder项目 1099
70.1.4 引用MainAppEntryPoint组件 1100
70.1.5 使用IApplicationPersistence接口 1102
70.1.6 使用Application-PersistenceFactory 1103
70.2 使用条件编译 1105
70.2.1 优点 1105
70.2.2 缺点 1106
70.2.3 条件编译方法概述 1106
70.2.4 查看ApplicationPersistence文件 1106
70.2.5 配置Flex编译器 1107
70.3 本章小结 1108
第Ⅻ部分 测试和调试 1111
第71章 调试Flex应用程序 1111
71.1 概述 1111
71.2 Flash Debug Player 1111
71.3 Flex Builder调试透视图 1112
71.3.1 设置断点 1112
71.3.2 在Debug模式下启动应用程序 1114
71.3.3 单步调试代码 1115
71.3.4 检查应用程序的状态 1117
71.4 命令行调试器 1120
71.5 额外的调试技术 1120
71.5.1 调试Java服务器代码 1120
71.5.2 Internet流量监控 1122
71.5.3 特定于应用程序的调试 1123
71.5.4 最大程度地利用日志 1124
71.5.5 调试绑定 1124
71.5.6 Adobe公用的bug数据库和问题报告系统 1126
71.6 本章小结 1129
第72章 使用Flex概要分析器 1130
72.1 概述 1130
72.2 准备工作 1130
72.3 概要分析的基础知识 1131
72.3.1 概要分析和优化最佳实践 1131
72.3.2 内存概要分析基础知识 1132
72.3.3 性能概要分析基础 1132
72.3.4 采样概要分析器基础 1133
72.4 Flex Builder 3的概要分析 1133
72.4.1 概要分析透视图 1133
72.4.2 启动概要分析器 1134
72.4.3 使用内存概要分析器 1137
72.4.4 使用性能概要分析器 1144
72.4.5 在概要分析器中过滤 1147
72.4.6 保存和加载概要分析数据 1148
72.4.7 其他有用的功能 1149
72.5 概要分析器的应用 1151
72.5.1 使用概要分析器来检测内存泄漏 1151
72.5.2 使用概要分析器来优化算法 1155
72.6 创建自己的概要分析器 1159
72.7 本章小结 1160
第73章 使用FlexUnit的单元测试与测试驱动开发 1161
73.1 概述 1161
73.2 为什么编写测试 1162
73.2.1 从一开始预防bug 1162
73.2.2 获得重构的信心 1162
73.2.3 设计中的驱动改进 1162
72.2.4 编写可测试软件 1162
73.2.5 快乐的开发人员和轻松制作的文档 1163
73.3 技术和术语 1163
73.3.1 FlexUnit库 1163
73.3.2 单元测试、测试用例和测试套件 1163
73.3.3 运行测试 1164
73.4 测试驱动开发的示例 1164
73.4.1 准备单元测试 1165
73.4.2 创建测试用例 1165
73.4.3 组装测试套件 1166
73.4.4 测试未能通过 1167
73.4.5 准备、调用、断言 1168
73.4.6 快乐和不快乐的路径 1171
73.4.7 安装和卸载 1173
73.4.8 测试中的白色区域 1175
73.5 高级主题 1175
73.5.1 组织测试套件 1175
73.5.2 删除与模拟对象的依赖关系 1176
73.5.3 Ant和Maven的持续集成 1180
73.5.4 重要的测试用例 1180
73.5.5 测试覆盖 1181
73.5.6 行为驱动开发 1181
73.6 本章小结 1181
第74章 日志框架 1183
74.1 概述 1183
74.2 使用日志框架 1183
74.2.1 创建日志目标 1183
74.2.2 获得正确的记录器 1184
74.2.3 在不同级别进行日志记录 1185
74.2.4 过滤日志语句 1185
74.2.5 只在必要时进行日志记录 1186
74.3 定制日志框架 1187
74.3.1 实现远程日志目标 1187
74.3.2 实现Java远程记录器 1188
74.3.3 创建进行远程日志记录的客户端 1190
74.4 深入主题 1191
74.4.1 嵌入式日志查看器 1191
74.4.2 Stopwatch日志记录 1193
74.4.3 使用ThunderBolt把日志记录到Firebug中 1195
74.4.4 从生产代码中删除日志 1197
74.5 本章小结 1198
第75章 自动化框架 1199
75.1 概述 1199
75.2 自动化框架的定义 1199
75.2.1 记录和重放 1200
75.2.2 自动化库 1201
75.2.3 运行时或编译时自动化 1201
75.2.4 组件标识 1201
75.3 一个简单应用程序的自动化 1202
75.3.1 安装一个自动化工具 1202
75.3.2 创建一个可测试的应用程序 1203
75.3.3 编译自动化 1203
75.3.4 记录一个测试脚本 1204
75.3.5 重放测试脚本 1207
75.4 高级主题 1208
75.4.1 自动化自定义组件 1208
75.4.2 创建自定义代理 1208
75.5 本章小结 1209
附录A ActiorScript语言对比 1211