第Ⅰ部分 应用程序基础知识 3
第1章 认识Flex 3
1.1 Web应用程序为何大行其道 3
1.2 RIA解决方案 5
1.2.1他们什么都想要 5
1.2.2 RIA的解决之道 6
1.2.3 RIA的工作原理 6
1.3 RIA的竞争技术 6
1.3.1 Adobe公司的Flex 7
1.3.2 Microsoft公司的Silverlight 7
1.3.3 Sun公司的JavaFX 8
1.3.4 AJAX——终点站 8
1.4熟悉Flex 10
1.4.1利用Adobe Flash的优势 11
1.4.2 Flex与JavaScript可以一起使用 11
1.4.3 Flex技术体系 12
1.5 Flex的工作原理 14
1.5.1 Flex语言 14
1.5.2事件驱动的环境 16
1.5.3 Flex的局限 17
1.6 Flex 4的新功能 18
1.7小结 19
第2章 从零开始 21
2.1经济的Flex开发方式 21
2.1.1建立编译环境 22
2.1.2建立编辑环境 23
2.1.3第三步(但愿读者还感兴趣) 24
2.2使用Flash Builder做真正的开发 24
2.2.1产品和价格表 25
2.2.2获得Flash Builder 26
2.3探索Flash Builder 26
2.4视图与视角 28
2.4.1预定义的视角 28
2.4.2切换视角 28
2.4.3自定义视角 29
2.5第一个项目——HelloWorld 30
2.5.1创建项目 30
2.5.2输入代码 32
2.5.3编译和运行 32
2.5.4查看实际效果 33
2.6使用设计模式 33
2.7内置的参考和API文档 34
2.7.1面向对象语言及其API 35
2.7.2访问API参考 35
2.7.3研读API参考 36
2.8 MXML与ActionScript速写 37
2.8.1 MXML的结构 37
2.8.2 MXML与ActionScript的关系 38
2.8.3事件由ActionScript处理 39
2.9小结 41
第3章 使用ActionScript 43
3.1注释 43
3.1.1行内注释 44
3.1.2多行注释 44
3.2变量 44
3.2.1变量名 44
3.2.2严格数据类型 44
3.2.3静态类型检查与动态类型检查 45
3.2.4顶级类 45
3.2.5特殊数据类型 46
3.3循环 46
3.3.1 for(初始值;条件;递增) 47
3.3.2 for(属性名in数组/对象) 47
3.3.3 for each(项in数组/对象) 48
3.3.4 while(条件) 48
3.3.5 do while(条件) 49
3.4条件语句(if和switch) 49
3.4.1 if…else 49
3.4.2 switch语句 51
3.5数组 52
3.5.1索引数组 53
3.5.2关联数组 55
3.6 ActionScript特色语法 56
3.6.1花括号 57
3.6.2逻辑操作符及快捷方式 57
3.7函数、类和包简介 59
3.7.1创建函数 59
3.7.2将ActionScript代码保存在单独的文件中 63
3.8简单的数据绑定 64
3.8.1不使用绑定 64
3.8.2添加绑定 64
3.8.3绑定标签 65
3.8.4使ActionScript变量可被绑定 66
3.9小结 67
第4章 布局和容器 69
4.1 Spark与Halo(MX) 69
4.2绝对布局 70
4.3基于约束的布局 72
4.3.1基本约束 73
4.3.2增强的约束 74
4.4自动布局 79
4.4.1使用布局类 79
4.4.2需要空间 81
4.5可变大小和固定大小 82
4.5.1可变大小 82
4.5.2固定大小 82
4.6容器 82
4.6.1 Application容器 83
4.6.2 Canvas容器 84
4.6.3基于 Group的容器和SkinnableContainer 84
4.6.4 Panel容器 87
4.6.5 ApplicationControlBar容器 87
4.6.6 DataGroup和SkinnableDataContainer 88
4.6.7 DividedBox、 HDividedBox和VDividedBox容器 91
4.6.8 Form容器 92
4.6.9 Grid容器 93
4.7小结 94
第5章 显示表单与捕获用户输入 95
5.1 id特性 96
5.2 Flex控件分类 97
5.2.1 Text控件 97
5.2.2 Date控件 99
5.2.3 Numeric控件 101
5.2.4 Flex的按钮组件 103
5.2.5选单控件 108
5.3访问控件的值 110
5.3.1向函数传递值 111
5.3.2向函数传递事件 111
5.3.3直接访问属性 112
5.3.4应该选择哪种方式 114
5.4小结 114
第6章 验证用户输入 115
6.1验证简介 115
6.2内置验证器 116
6.2.1 Validator 117
6.2.2 StringValidator 118
6.2.3 NumberValidator 119
6.2.4 DateValidator 120
6.2.5 EmailValidator 122
6.2.6 CreditCardValidator 123
6.2.7 CurrencyValidator 124
6.2.8 PhoneNumberValidator 125
6.2.9 RegExpValidator 125
6.2.10 SocialSecurityValidator 127
6.2.11 ZipCodeValidator 128
6.3实时验证 129
6.4提交值验证 130
6.5通过性验证 130
6.6脚本式验证 131
6.7验证技巧 132
6.7.1验证器是否总是检查所有条件 132
6.7.2控制由什么来触发验证操作 133
6.8小结 133
第7章 格式化数据 135
7.1内置格式化程序 136
7.1.1 Formatter 136
7.1.2 NumberFormatter 136
7.1.3 CurrencyFormaatter 138
7.1.4 DateFormatter 139
7.1.5 PhoneFormatter 142
7.1.6 ZipCodeFormatter 144
7.1.7 SwitchSymbolFormatter 145
7.2实时格式化 146
7.3脚本式格式化 147
7.3.1结合使用函数与格式化程序组件 147
7.3.2结合使用函数与格式化程序类 148
7.4处理格式化错误 149
7.5小结 150
第8章 MX DataGrid、列表和树 151
8.1基于列表的一系列MX组件 151
8.1.1 ListBase和AdvancedListBase的属性 152
8.1.2 MX ListBase事件 153
8.2集合与dataProvider 153
8.2.1填充dataProvider 154
8.2.2集合的类型 154
8.2.3集合的使用者 154
8.3集合的初始化 155
8.4集合的填充 156
8.4.1 List组件 156
8.4.2 HorizontalList组件 159
8.4.3 TileList组件 160
8.4.4 DataGrid组件 162
8.4.5 Tree组件 166
8.5与基于List的MX组件交互 168
8.5.1列表事件 168
8.5.2向函数传递事件 168
8.5.3向函数中传递数据 170
8.5.4直接访问被选定的行 171
8.5.5绑定到被选定的行 171
8.6小结 172
第9章 使用Spark列表控件 173
9.1基于SparkList的一系列组件 173
9.1.1使用名称空间标识合适的组件 173
9.1.2使用基于List的Spark控件的项渲染器 174
9.2基于List的Spark控件 174
9.2.1 ButtonBar控件 175
9.2.2 SparkList控件 176
9.2.3 DropDownList控件 177
9.3与基于List的Spark组件的交互 179
9.3.1选择项目时默认分发事件 179
9.3.2 IndexChangedEvent对象 179
9.4理解Flex 4基于List的组件架构 180
9.4.1类层次结构 180
9.4.2新的基于List的Spark组件类 181
9.5在Spark架构中构建基于List的自定义组件 181
9.5.1理解Group和SkinnableContainer类 182
9.5.2构建自定义SparkList组件 182
9.6小结 186
第10章 自定义列表 187
10.1自定义数据显示 187
10.1.1 labelField属性 187
10.1.2标签函数 188
10.1.3标签函数的类型 189
10.1.4使用多列标签函数 190
10.1.5标签函数的用途 192
10.1.6从全局考虑 192
10.2项渲染器 192
10.2.1 Spark MXML项渲染器 193
10.2.2在Spark中对MX组件使用MXML项渲染器 194
10.2.3创建行内项渲染器 198
10.2.4使用混入项渲染器 198
10.3项编辑器 200
10.3.1启用项编辑功能 200
10.3.2创建项编辑器 202
10.3.3项编辑事件 204
10.3.4合二为一:rendererlsEditor 205
10.4高级项渲染器 205
10.4.1 AdvancedDataGridRendererProvider 206
10.4.2引用列 207
10.4.3跨列使用 208
10.4.4实现通行显示 208
10.5滤镜函数 210
10.6小结 211
第Ⅱ部分 应用程序流与结构 215
第11章 事件 215
11.1事件系统 215
11.1.1事件系统——好莱坞原则 217
11.1.2事件发送系统 217
11.2发送和接收事件 218
11.2.1使用ActionScript添加事件监听器 220
11.2.2绑定事件 222
11.2.3移除事件监听器 225
11.3自定义事件 227
11.3.1分派自定义事件类型 227
11.3.2创建自定义事件 228
11.3.3向自定义分派器中添加事件元数据 232
11.3.4停止事件传播 234
11.4小结 236
第12章 应用程序导航 237
12.1准备菜单数据 237
12.1.1嵌套的数组 238
12.1.2嵌套的数组集合 238
12.1.3模型 240
12.1.4 XML组件和类 241
12.1.5 XMLList组件 242
12.1.6 XMLListCollection组件及类 242
12.2使用菜单 244
12.2.1创建菜单 245
12.2.2定位菜单 246
12.2.3自定义菜单项 246
12.2.4与菜单交互 248
12.3使用菜单栏 250
12.3.1创建菜单栏 250
12.3.2定位菜单栏 251
12.3.3自定义菜单栏中的项 251
12.3.4处理用户与菜单栏的交互 252
12.4使用ViewStack 254
12.4.1创建ViewStack 255
12.4.2为ViewStack添加导航功能 257
12.4.3处理用户与ViewStack的交互 260
12.5 TabNavigator 261
12.5.1创建TabNavigator 261
12.5.2处理用户与TabNavigator的交互 262
12.6 Accordion 263
12.6.1创建Accordion 263
12.6.2填充Accordion 264
12.6.3处理用户与Accordion的交互 265
12.7小结 265
第13章 弹出式窗口简介 267
13.1创建首个弹出式窗口 267
13.1.1首先创建标题窗口 267
13.1.2使用PopUpManager打开窗口 268
13.1.3关闭弹出式窗口 270
13.2控制窗口位置 270
13.2.1使用centerPopUpo方法 271
13.2.2计算窗口的位置 271
13.3弹出式窗口与数据的结合 274
13.3.1从弹出式窗口中取得数据 277
13.3.2发送包含数据的自定义事件 277
13.3.3取出数据 278
13.3.4向窗口中发送数据 279
13.4使用警告窗口 282
13.4.1创建简单的警告窗口 282
13.4.2挖掘警告窗口的潜力 282
13.4.3高级警告窗口 283
13.4.4修饰警告窗口 284
13.5小结 286
第14章 实现视图状态 287
14.1理解视图状态 287
14.2 Flex中的视图状态 288
14.2.1使用属性 290
14.2.2使用事件处理程序 293
14.2.3使用状态组 295
14.2.4添加和移除组件 297
14.2.5更改组件的父组件 302
14.2.6状态事件 304
14.3综合运用 306
14.4小结 307
第15章 使用数据服务 309
15.1访问服务器端数据 309
15.1.1使用HTTPService对象 310
15.1.2通过WebService组件使用Web服务 312
15.2活动消息格式 313
15.2.1开源AMF 314
15.2.2 AMF与PHP 314
15.2.3 AMF和ColdFusion 314
15.2.4 B1azeDS 314
15.2.5 LiveCycle Data Service 315
15.2.6其他技术 315
15.3使用Flash Builder构建以数据为中心的应用程序 315
15.3.1建立正确的环境 315
15.3.2与服务器建立连接 316
15.4使用ColdFusion进行以数据为中心的Flex 322
15.5使用Java EE和BlazeDS进行以数据为中心的Flex开发 324
15.6把模型绑定到视图上 325
15.6.1拖放式数据绑定 325
15.6.2生成一个大纲-细节表单 326
15.6.3检查Flash Builder代码 327
15.7小结 329
第16章 对象和类 331
16.1用5分钟的时间理解OO理论 331
16.1.1对象和类的关系 331
16.1.2对象拥有属性和方法 332
16.1.3继承 333
16.1.4封装和耦合 334
16.2操作对象 335
16.2.1进一步了解对象 335
16.2.2对象的方法 336
16.2.3方法的参数 337
16.2.4方法返回信息 337
16.3创建类 338
16.3.1创建类文件 338
16.3.2指定包 339
16.3.3类修饰符 339
16.3.4超类:扩展类 339
16.3.5接口 340
16.3.6分析类 340
16.4操作属性 341
16.4.1添加属性 341
16.4.2添加getter/setter方法 342
16.5创建类的方法 343
16.6小结 346
第17章 自定义组件 347
17.1理解Flex 4组件 347
17.1.1 Spark组件架构 348
17.1.2自定义组件的种类 349
17.2创建简单的自定义组件 352
17.2.1构建简单的ComboBox 352
17.2.2简单的Spark组件 354
17.3使用Spark Skin对象进行换肤 355
17.3.1使用元数据绑定组件皮肤 356
17.3.2自定义组件视图状态 356
17.3.3定义皮肤部件 357
17.3.4声明host 358
17.4复合组件 358
17.4.1比较Halo与Spark 359
17.4.2 Spark布局类 360
17.4.3创建VMXML复合组件 361
17.5创建高级Flex 4组件 363
17.5.1使用ActionScript构建州选择器 363
17.5.2确定何时重写 364
17.6组件的通信 368
17.6.1使用getter和setter作为属性代理 369
17.6.2将变量绑定到组件属性 370
17.6.3使用事件传递数据 371
17.7小结 373
第18章 创建可重用组件 375
18.1利用可重用性 375
18.1.1 Reveal组件的背景 376
18.1.2 Spark可重用性的理论和概念 376
18.1.3创建Reveal组件 378
18.1.4为第一个Reveal实现添加皮肤 380
18.2 Reveal的新外观 383
18.3运行时共享库 387
18.3.1理解SWC文件 387
18.3.2 RSL的类型 387
18.3.3在Flex应用程序中使用RSL 388
18.4小结 390
第19章 架构设计模式 391
19.1 Flex驱动的设计模式 392
19.1.1模型-视图-控制器模式 392
19.1.2开发自己的架构 393
19.2微架构简介 398
19.2.1微架构的简单定义 398
19.2.2使用微架构的原因 399
19.2.3第一代微架构 399
19.2.4第二代微架构 400
19.2.5控制反转和依赖注入 401
19.3使用Robotlegs框架 402
19.3.1使用Robotlegs注入依赖 402
19.3.2使用Robotlegs映射实用工具来配置依赖注入 403
19.4使用Robotlegs MVCS创建应用程序 408
19.4.1设置Robotlegs项目 409
19.4.2使用Context类引导应用程序 409
19.4.3对视图使用中介 411
19.4.4使用Robotlegs命令进行控制 416
19.4.5服务是通往外界的大门 417
19.4.6使用模型来管理数据和状态 420
19.5小结 422
第III部分 高级应用 425
第20章 自定义体验 425
20.1用户体验设计的原则 425
20.1.1围绕用户故事进行构建 425
20.1.2考虑上下文 427
20.1.3 VIBE模型 429
20.2视觉吸引力 429
20.2.1创建并使用主题 430
20.2.2使用CSS设置Flex 4应用程序的样式 433
20.3交互式体验 437
20.3.1使用FXG和Flash CatalystCS5进行声明性设计 437
20.3.2使用效果增强用户体验 439
20.4业务优化 441
20.4.1使用最佳实践改进体验 441
20.4.2通过单元测试改进用户体验 442
20.4.3概要分析Flex 4中的应用程序 443
20.5可扩展性 444
20.5.1可扩展性与用户体验的间接关系 444
20.5.2可扩展性与用户体验的直接关系 445
20.5.3编写干净的代码以实现易用性 445
20.6小结 447
第21章 使用效果 449
21.1效果的含义 449
21.1.1可用的效果 449
21.1.2合成效果 451
21.2使用效果 451
21.2.1创建效果的方式 451
21.2.2由事件触发的效果 451
21.2.3以编程方式应用效果 453
21.2.4使用状态过渡来触发效果 457
21.3创建合成效果 458
21.3.1串行效果 458
21.3.2并行效果 459
21.3.3组合合成效果 460
21.4探索效果 461
21.4.1 Animate效果 462
21.4.2使用AnimateFilter设置滤镜的动画 469
21.4.3使用AnimateTransitionShader设置像素着色器动画 472
21.4.4自定义效果缓动 476
21.4.5在播放动画时显示文本 478
21.4.6创建声音效果 480
21.5小结 481
第22章 拖放 483
22.1拖放过程 483
22.2在Flex组件中实现拖放 486
22.2.1内置支持拖放的组件 486
22.2.2在列表中启用拖放 486
22.2.3移动与复制 488
22.2.4使用拖放实现用户控制的排序 489
22.2.5多项拖放 490
22.2.6双向拖放 491
22.3使用DragManager 493
22.3.1 DragManager的属性和方法 493
22.3.2接受或拒绝放置 494
22.3.3应用自定义放置方式 496
22.4为非列表组件添加拖放行为 499
22.4.1设置示例 499
22.4.2启动拖动 500
22.4.3使用自定义的拖动代理 502
22.4.4处理放置 504
22.5自定义拖放体验 508
22.5.1修改拖动代理图标 508
22.5.2用于拖放的List组件换肤 509
22.5.3在Spark和Halo之间混合拖放 510
22.6小结 511
第23章 探索Flex图表 513
23.1图表简介 513
23.1.1图表的构成 514
23.1.2图表类型简介 514
23.2准备系列和数据 515
23.3创建图表 516
23.3.1调用图表 516
23.3.2添加图例 517
23.3.3改变图表类型 518
23.3.4过滤图表数据 520
23.4堆叠图表 521
23.5探索图表类型 522
23.5.1面积图 522
23.5.2条形图和柱状图 523
23.5.3折线图 525
23.5.4气泡图 526
23.5.5烛台图和HLOC图 528
23.5.6饼图 530
23.5.7散点图 533
23.6自定义图表 535
23.6.1系列笔触 535
23.6.2系列填充 536
23.7小结 538
第24章 调试与测试 539
24.1调试 539
24.1.1安装Flash Debug Player 540
24.1.2使用trace()函数 540
24.1.3使用Flash Builder调试器 542
24.1.4监视网络活动 546
24.2 Flex概要分析器 547
24.3使用自动化工具测试应用程序 549
24.3.1单元测试 550
24.3.2功能测试 555
24.4小结 557
第25章 项目收尾 559
25.1自定义HTML包装器 559
25.1.1包装器文件 560
25.1.2 HTML模板 560
25.1.3 SWFObject 2 561
25.2部署 563
25.2.1创建生产版本 564
25.2.2放置客户端文件 565
25.2.3放置服务器端文件 565
25.2.4测试应用程序 565
25.3小结 566