Adobe Flex 3高级编程

Adobe Flex 3高级编程 pdf epub mobi txt 电子书 下载 2026

出版者:清华大学出版社
作者:[加拿大]Joseph Balderson
出品人:
页数:1218
译者:杨柏林
出版时间:2011-10
价格:158.00元
装帧:平装
isbn号码:9787302262053
丛书系列:wrox红皮书
图书标签:
  • flex
  • 编程
  • 计算机
  • adobe
  • hao,hao
  • Flex
  • 3而武器二
  • 3
  • Adobe Flex
  • Flex 3
  • RIA
  • Flash
  • 编程
  • 开发
  • Adobe
  • 用户界面
  • 数据处理
  • 高级技巧
  • 示例代码
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

近几年来,Flex已经成为基于Flash平台开发富Internet应用程序(RIA)的主流技术,而且Flex 3的发展潜力也十分令

人兴奋。 Adobe Flex 3高级编程》一书中全面深入的资源不仅为读者提供有关Flex的基础知识,而且揭示了如何充分

利用Flex 3来创建统一的Internet和桌面应用体验。

《Adobe Flex 3高级编程》将详细介绍Flex 3与Flash平台在各个方面的区别与联系,同时也会提供客户端Flex应用

程序开发和最佳实践方面的扩展知识。其中将解释Flex Builder可以实现的功能,开发简单Flex 3应用程序的方法,以

及使用Flex 3框架类和组件的方法。同时,您也会看到一些更高级的主题,如数据集成、架构框架和高级工具。

通过学习本书的详细示例,无论您是否具备Flex开发经验,这本权威性的指南都将帮助您快速上手和使用Flex 3。

深入探索数据驱动应用的核心构建:面向新一代企业级系统的深度解析 本书聚焦于构建高性能、高可维护性、面向未来的企业级软件架构与实现,特别关注在高度复杂、数据密集型场景下,如何利用成熟的软件工程实践和前沿的设计模式,实现系统级的优化与扩展。 --- 第一部分:现代企业级架构的基石与范式转换 本部分旨在为读者建立一个坚实的理论基础,理解当前企业应用系统所面临的挑战,并介绍应对这些挑战所需采用的现代架构范式。我们摒弃碎片化的技术介绍,转而探讨系统设计哲学。 第一章:复杂性管理与架构演进 理解技术债务的累积效应: 深入分析快速迭代带来的隐性成本,以及如何在不牺牲开发速度的前提下,有效控制和偿还技术债务。 宏观架构选择的权衡艺术: 比较单体、微服务、事件驱动架构(EDA)的适用场景、边界定义与治理模型。重点分析在混合架构中如何实现服务间的有效协调与数据一致性。 领域驱动设计(DDD)的深化应用: 不仅仅停留在定义限界上下文(Bounded Contexts),更探讨如何在不同上下文间建立清晰的上下文映射(Context Mapping),以及如何通过通用语言(Ubiquitous Language)确保跨团队的理解一致性。 第二章:高性能数据访问层设计 关系型与非关系型数据的混合策略: 探讨在统一数据访问层(DAL)下,如何无缝集成SQL数据库、NoSQL数据库(如文档型、键值对存储)的优势,实现数据的最佳存储与检索策略。 数据抽象层的构建: 设计一套高度抽象且可插拔的数据访问接口,使得业务逻辑层(BLL)可以完全独立于底层存储技术的变化。深入分析Repository模式、Unit of Work模式在应对复杂事务时的局限与优化。 缓存策略的层级化部署: 从分布式缓存(如Redis集群)到本地进程内缓存的设计,详细阐述缓存一致性协议(如Write-Through, Read-Through, Cache-Aside)的选择标准,并分析缓存穿透、雪崩问题的防御机制。 第二部分:构建健壮的业务逻辑与服务编排 本部分关注如何将清晰的业务规则转化为稳定、可测试、易于扩展的代码结构,强调流程的自动化与服务的可靠性。 第三章:面向服务的业务流程自动化 状态机在复杂流程中的应用: 探讨如何使用状态机模型(State Machines)来精确控制业务流程的生命周期,有效管理补偿事务(Saga模式),确保长流程的原子性。 命令与查询责任分离(CQRS)的实践: 详细介绍CQRS的读写分离模型如何优化数据模型的读写性能差异,并探讨如何在CQRS架构中处理事件溯源(Event Sourcing)带来的复杂性。 消息队列与异步通信的深度集成: 深入剖析不同消息中间件(如Kafka, RabbitMQ)的特性,重点讲解消息的顺序性保证、死信队列(DLQ)的处理机制,以及如何构建幂等的消费者。 第四章:服务端稳定性的工程保障 韧性设计(Resiliency Engineering): 实施熔断器(Circuit Breakers)、限流器(Rate Limiters)和超时控制,使系统能够在部分依赖失败时仍能提供降级服务。 依赖注入(DI)的高级应用与容器管理: 探讨DI容器在大型项目中的生命周期管理、AOP(面向切面编程)的实现,以及如何利用这些工具实现日志、事务管理的横切关注点分离。 安全上下文的传递与认证授权模型: 设计统一的安全上下文传递机制,实现跨服务的身份验证(Authentication)和细粒度的权限控制(Authorization),重点关注基于角色的访问控制(RBAC)和属性的访问控制(ABAC)。 第三部分:前端应用的解耦与用户体验的极致优化 虽然侧重于后端架构,但现代企业应用的用户界面是系统的价值体现。本部分将讨论如何设计前端应用以更好地适应后端服务的演进。 第五章:构建解耦的前端应用架构 模块化前端设计: 介绍如何将大型单页应用(SPA)拆解为可独立部署、独立迭代的微前端(Micro-Frontends)模块,并解决模块间的通信问题。 状态管理与数据流的规范化: 深入分析 Flux/Redux/MobX 等状态管理模式的原理与适用场景,确保前端状态管理的可预测性和可调试性。 服务端渲染(SSR)与预渲染(Prerendering)的性能考量: 比较不同渲染策略在首次加载时间(TTI)和SEO优化方面的差异,指导开发者做出最优决策。 第六章:高效的用户交互与数据同步 实时通信的Web Sockets与长轮询的对比: 在不同的网络环境下,如何选择最佳的实时数据推送机制。 数据聚合网关(BFF - Backend for Frontend): 设计专门服务于特定前端视图的API层,用以聚合、转换后端复杂数据模型,简化前端集成。 表单管理与验证的声明式编程: 探讨如何使用声明式方法构建复杂、多步骤表单,并确保在客户端和服务器端进行同步、高效的验证。 第四部分:运维、可观测性与持续交付 系统的健壮性不仅体现在代码本身,更体现在部署、监控和反馈的闭环中。 第七章:DevOps文化下的持续交付管道 基础设施即代码(IaC)的实践: 使用工具(如Terraform/Ansible)来管理和版本化基础设施配置,确保环境的一致性。 蓝绿部署与金丝雀发布的策略: 详细讲解零停机部署策略的实施步骤,以及如何最小化新版本上线带来的风险。 自动化测试的层次化策略: 强调单元测试、集成测试到端到端(E2E)测试的比例分配,重点分析契约测试(Contract Testing)在微服务集成中的关键作用。 第八章:可观测性(Observability)体系的构建 日志的结构化与集中化: 实施ELK/Loki堆栈,确保日志是可搜索、可分析的结构化数据。 分布式追踪(Distributed Tracing)的应用: 部署如Zipkin或Jaeger等工具,实现请求在整个服务网络中的完整路径追踪,精准定位延迟瓶颈。 健康度检查与主动告警: 设计基于业务指标(而非单纯的CPU/内存)的健康检查,建立前瞻性的告警系统,将问题扼杀在用户察觉之前。 --- 本书的目标读者是寻求从“能用”到“卓越”的资深开发者、技术主管和架构师。阅读完本书,您将掌握构建下一代企业级、高并发、可伸缩系统的完整思维框架和实践方法论,确保您的应用在复杂度和规模不断增长的业务需求下,依然保持稳定、高效和易于维护的状态。

作者简介

自从Joseph Balderson小时候开始组装LEGO玩具并拆卸他能找到的几乎每个装置时,他就迷上了计算机和编程。在青少年时期,Joseph对电子产品、微控制器和机器人产生了浓厚的兴趣。而在大学期间,当他参加艺术院校,并研究诗歌、哲学和平面设计时,他的这些兴趣就不再那么浓厚。直到Joseph在1999年发现Flash 4时,他终于找到了自己真正的归属,这是将他对艺术的激情与科学、设计和编程的一种完美结合。

这种激情在Joseph的整个职业生涯中引导了他的角色转变,从平面设计师到Web设计师、到Flash设计师、再到Flash开发人员,而最终,他成为了一名Flex和ActionScript开发人员。Joseph在此期间曾担任多个职位,从早期网络公司的万事通到银行职员、Flash自由职业者,以及临时雇员。

Joseph在沟通和写作方面的兴趣也使他在2005年成为Community MX的一名职业作家和编辑,直到今日他仍在撰写有关Flash和Flex技术的双周刊教程。Joseph在2005~2006年曾在Humber大学担任多媒体学的教授,从事Flash和ActionScript的教学工作。在2006~2007年担任Adobe认证的企业咨询师一段时间之后,Joseph重新回到了自由职业的生涯,致力于咨询和写作。他作为贡献者和技术编辑参与过大量的图书项目,而且还参与过许多创业者和咨询机构的Flex与AIR富Internet应用程序的构建工作。

现在Joseph是一个自由的Flex和Flash平台开发人员,他居住在加拿大安大略湖中部的格鲁吉亚湾地区。他的大部分时间是在家乡的工作室度过的,梦想着使用Adobe技术创建出很酷的作品。可以通过http://www.joeflash.ca查看Joseph的作品和博客。

Peter Ent是Adobe公司的一位计算机科学家,与LiveCycle团队一起工作。在此之前,Peter作为Flex支持工程师做一些Adobe客户服务的工作,然后成为了一名技术客户经理。在加入Adobe之前,Peter在State Street 和 Fidelity Investments从事金融服务行业的工作。他也有两次创业的经历,通过构建软件应用程序完成一些成像和分子建模的事情。Peter毕业于Syracuse大学并获得计算机科学学士学位。

Jun Heider是RealEyes Media公司的一位资深的开发人员和技术培训师,这是一家在科罗拉多州丹佛的Adobe合作伙伴公司,致力于富Internet应用程序的工作。Jun毕业于Regis大学并获得计算机网络学位,而且拥有大量的技术资格证书。

Jun从ColdFusion 4.5就开始使用它,使用Flex始于Flex 2的测试版,而且AIR的使用开始于它的第一个预发布版本。Jun所从事的项目有很多,从以全球家庭为基础的商业组织的一个大型群集ColdFusion应用程序到公司内部基于Flex的业务应用程序,例如Chase Manhattan公司基于Flex的大规模在线业务(如Beatport.com),而且还有基于AIR的实用工具应用程序,如Beatport下载器。

除了开发和培训,Jun也喜爱在会议上演讲,例如在Adobe MAX、360 | Flex和Flexmaniacs会议上。Jun也喜欢写作,他在O'Reilly Inside RIA上是一个非常活跃的博主,并还撰写了许多有关Fusion Authority 的Flex Authority的文章。

Todd Prekaski从1993年就已经开始构建软件了(不包括他年轻时编写的Apple IIc和TRS-80)。他针对基于Web的创业公司和财富500强中前100名的企业一直引导他们的应用程序开发及策略,并使用了一整套的技术和平台,包括Java、.NET以及LAMP。Todd目前是Beacon Street Software的首席技术架构师,该公司位于波士顿的马萨诸塞州。偶尔,他的思想也会出现在自己的博客中www.simplifiedchaos.com。

Tom Sugden是Adobe Professional Services的技术架构师。他对计算机的兴趣开始于20世纪80年代,在ZX Spectrum 48K上编写运动模拟器和beep音乐的程序。当键盘在Dailey Thompson中的使用有非常大的突破时,在涉足黑色的汇编语言之前,Tom升级到了Commodore Amiga,并继续在AMOS上创建业余的游戏(但是含有多声道音响)。

有了这些基础作铺垫,Tom开始研究计算机科学,并学习C++、Java和Flash 3。毕业后,Tom在Domino唱片公司担任自由职业者,构建了他的第一个网站和编码音乐视频。这促使Tom就职于Realise,一家由早期的苏格兰网吧转变成的网络公司,在那里他编写了一个搜索引擎和名为Glowworm的文档分类器(后失败地更名为KM-Bridge)。

泡沫破裂之后。学校的夜晚再也没有Hoegaarden啤酒。Tom逃进了“避风港”EPCC,一家在爱丁堡大学的软件咨询公司和高性能计算中心。他在这里从事各种数据集成项目的工作,帮助天文学家分析太空中的物体、链接生物和制药数据库,以及处理愤怒的乘客与晚点的公共汽车之间的关系。在此期间,Tom对设计模式和敏捷方法非常感兴趣,并开始在高性能计算的硕士课程中授课。

当有机会加入到Adobe公司时,Tom看到了他一直喜爱的并且非常有创意的同类程序设计,但他们的设置更具商业化。Flex和Flash Player的发展速度如此迅速,似乎存在着无穷无尽的可能性,因为他们早些年已经在Commodore Amiga系统上做了很多工作。Tom加盟了Steven Webster在苏格兰爱丁堡的crack团队,在那里他从专家身上学会了Flex 2和LiveCycle数据服务,并开始向Adobe的许多企业客户提供富Internet应用程序。

Andrew Trice是华盛顿Cynergy Systems的Flex和AIR首席架构师。他擅长于数据可视化、客户端/服务器体系结构、面向对象原则,以及富应用程序开发。他从事Web开发超过10年,有超过8年的Flash平台开发经验。Andrew从Flex 1.5就开始进行开发,具有旺盛的创造力和丰富的Flex/Flash平台开发经验。Andrew还是Adobe Devent和其他行业网络日志的固定作者。他的知名度不仅是因为Flex专业知识,而且他还是微软认证的应用程序开发人员,并拥有广博的知识,包括关系数据库、AJAX/JavaScript、ColdFusion、.NET,以及基于Java的Web应用程序。

David Hassoun是RealEyes媒体有限责任公司的创始人,这是一家总部在科罗拉多州的数字媒体公司,侧重于交互式移动媒体与高级Flash和Flex平台的应用程序。David一直对移动媒体、视频效应,以及可用性和交互性的挑战非常的有激情。David是Adobe认证的硕士生导师,在丹佛大学讲授高级RIA课程,并担任Rocky Mountain Adobe用户组的经理,同时讲解和开发高级Flash和Flex应用程序方面的课程。作为一名顾问或其他公司的外聘人员,他受聘的公司范围非常之广,例如American Express、Chase Manhattan、Qwest公司、Boeing公司、Macromedia公司、Adobe公司、U.S. Air Force、Bechtel/Bettis等。David会定期地对高级代码和最佳的技术实践进行评价,而且作为一个行业专家在过去数年为国际行业中的领导提供了许多指导性的意见—— 包括一些技术、课件和应用程序。

Joe Berkovitz是Noteflight有限责任公司的总裁,这是世界上第一个在线乐符编辑器制造商,而且他还是Infrared5咨询公司的一位高级软件架构师。随着近三十年对世界一流软件的设计和构建,Joe向他在Flash和Flex方面的著作引入了许多创新性和严谨性。他经常在会议上发表演讲,而且他还是复杂的Flex应用程序的MVCS架构的鼻祖。Joe已发表了若干非常有抱负的开源项目、最新的Moccasin图形编辑框架和AS3的一个代码覆盖工具Flexcover。Joe也是一个活跃的钢琴家和作曲家,并经常在波士顿地区进行表演。

目录信息

第I部分 Flex 概 述
第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 Object类 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入门 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
第II部分 使用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
第III部分 使 用 组 件
第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.containers.VDividedBox 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.ToggleButtonBar 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
第IV部分 高级组件开发
第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
第V部分 可视化效果与多媒体
第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
第VI部分 数 据 管 理
第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
第VII部分 客户端通信
第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
第VIII部分 服务器集成
第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
第IX部分 数 据 服 务
第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
第X部分 使 用 Cairngorm
第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 Cairngorm事件 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 使用Cairngorm表示
模型 999
63.1.2 Cairngorm表示模型的
示例应用程序 1000
63.1.3 域模型 1003
63.1.4 进一步讨论 1003
63.2 组织Cairngorm项目 1003
63.2.1 小型Cairngorm项目 1004
63.2.2 大型Cairngorm项目 1004
63.3 Cairngorm的反模式 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
第XI部分 应用程序开发策略
第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 构建Flex Builder项目 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
第XII部分 测试和调试
第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 ActionScript语言对比 1211
· · · · · · (收起)

读后感

评分

评分

评分

评分

评分

用户评价

评分

这本书,名为《Adobe Flex 3高级编程》,当我第一次拿到它时,内心是充满期待的。在学习Flex的旅程中,我早已对基础知识烂熟于心,然而,真正要将Flex应用到复杂的企业级项目中,去构建那些既美观又高效的应用,我深知自己还有很长的路要走。这本书的出现,就像是一盏明灯,指引着我深入探索Flex的内在机制,去理解那些隐藏在API背后的设计哲学。我期望它能够教会我如何更好地组织代码,如何设计可扩展的架构,如何运用各种设计模式来解决实际开发中遇到的难题。尤其是在性能优化方面,我总是觉得自己的应用存在提升空间,比如如何更有效地管理内存,如何减少UI的渲染时间,如何实现更流畅的动画效果,这些都是我迫切想要掌握的技能。书名中的“高级”二字,让我看到了深入挖掘Flex潜力的可能,不再满足于简单的页面布局和组件交互,而是要去触及那些能让应用脱颖而出的核心技术。我特别希望能看到关于自定义组件开发、事件处理机制的深度解析、数据绑定的高级技巧,以及如何在Flex中集成Java或.NET等后端技术,构建完整的解决方案。这本书如果能提供一些真实的、具有代表性的项目案例,那就更好了,能够让我将理论知识融会贯通,学以致用,在实际开发中获得更快的进步。我设想,翻开书页,迎接我的将是一系列精妙的讲解,它们将一步步引导我揭开Flex 3的神秘面纱,让我从一个Flex的使用者,蜕变成一个Flex的设计者和创造者。我对这本书的期望,不仅仅是技术上的提升,更是思维上的启迪,让我能够以更成熟、更专业的视角来审视和构建Flex应用。

评分

《Adobe Flex 3高级编程》这本书,对于我而言,其价值在于能否真正地将我从“会用Flex”提升到“精通Flex”的层面。我深知Flex 3的强大之处远不止于表面的组件堆叠,其背后蕴含着一套精巧的设计理念和强大的技术架构。我期望这本书能够深入剖析Flex的运行时环境,讲解其事件流、消息传递机制,以及如何通过这些机制实现组件间的解耦和高效通信。在MXML的深度应用方面,我希望它能超越简单的UI布局,教会我如何编写更具表现力和灵活性的MXML代码,例如如何利用MXML的组件继承、声明式组件创建、以及自定义属性等高级特性。对于ActionScript 3在Flex开发中的角色,我期待这本书能提供更深入的讲解,包括如何利用其面向对象特性来构建复杂的业务逻辑,如何进行性能优化,以及如何处理异步编程和错误管理。在数据持久化和缓存策略方面,我也希望能有所收获,学习如何在Flex应用中有效地管理和存储数据,以提高应用程序的响应速度和用户体验。这本书如果能提供一些关于Flex与其他Adobe产品(如Flash Professional、Dreamweaver)的集成方案,或者关于Flex与服务器端技术(如Java, PHP, .NET)的交互模式,那将极大地拓展我的开发视野。我期待这本书能成为我手中的一把利器,帮助我解决在构建高性能、可扩展的Flex应用程序时遇到的各种挑战,让我能够游刃有余地应对复杂项目,并创造出令人印象深刻的Flex作品。

评分

《Adobe Flex 3高级编程》这个书名,足以激起我对它强烈的探索欲望。我一直认为,真正的高级开发,不仅仅在于掌握API的使用,更在于理解其背后的设计哲学和架构思想。我期望这本书能够深入讲解Flex 3的运行时机制,例如其内存管理、垃圾回收机制、以及事件分发模型,这些都是理解Flex性能优化的基石。在组件化开发方面,我希望它能教授我如何设计可复用、可扩展的UI组件,如何利用MXML和ActionScript协同开发,以及如何构建清晰的组件间通信机制。对于数据处理和管理,我渴望学习更高级的策略,例如如何高效地处理大量数据,如何实现数据的本地缓存,以及如何与各种后端服务进行无缝集成。这本书如果能提供关于Flex应用程序的安全性最佳实践,比如如何防止代码注入、如何保护用户数据等,那将为我的开发工作提供重要的安全保障。我设想,这本书将包含丰富的案例研究和代码示例,能够清晰地展示各种高级技术的应用场景,并指导我如何将其灵活地运用到实际项目中。我期待通过这本书,能够提升我对Flex 3的理解深度,掌握构建高性能、可维护、安全可靠的Flex应用程序的关键技术,从而成为一名更优秀的Flex开发者。

评分

《Adobe Flex 3高级编程》这本书,对我来说,它意味着探索Flex 3的深度和广度。在掌握了Flex 3的基础知识后,我渴望能够触及那些能让我的应用程序更加强大、更加高效的“高级”领域。我希望这本书能够详细讲解Flex 3的运行时架构,包括其内存管理、事件处理机制以及组件生命周期,这些对于构建高性能的应用至关重要。在UI交互方面,我期待学习如何利用Flex 3实现更精细的动画效果,如何创建更具吸引力的用户体验,以及如何构建能够适应不同屏幕尺寸的响应式布局。这本书如果能深入探讨Flex 3与后端服务的集成,例如如何使用RemoteObject、HTTPService,以及如何处理数据验证、错误恢复和安全通信,那将极大地拓展我的开发思路。我特别希望能学习到关于Flex 3的性能优化技巧,包括如何识别和解决性能瓶颈,如何优化代码,以及如何利用Flex提供的工具进行性能分析。我设想,这本书将是一本充满智慧的指南,它不仅能解答我现有的疑问,更能启发我发现新的可能性,让我能够自信地应对复杂的Flex项目,并创造出令人印象深刻的Flex应用。

评分

对于《Adobe Flex 3高级编程》这本书,我充满了好奇,特别是它所承诺的“高级”部分。在经历了Flex 3的基础学习之后,我发现自己对于一些更深层次的概念理解尚浅,尤其是在构建大型、复杂的应用程序时,常常会遇到瓶颈。这本书如果能深入讲解Flex的运行时架构,比如其事件模型、生命周期管理、以及内存回收机制,将会对我大有裨益。我渴望了解如何在Flex中实现更强大的数据管理策略,例如如何高效地处理大量数据,如何实现数据的缓存和异步加载,以及如何与各种后端数据源进行无缝集成。在UI交互方面,我希望这本书能指导我如何创建更具响应性和用户友好性的界面,包括深入研究Flex的皮肤和样式系统,如何自定义组件的外观和行为,以及如何利用MXML和ActionScript的结合来实现复杂的UI逻辑。此外,关于Flex的性能调优,这绝对是这本书最吸引我的地方之一。我迫切希望学习如何识别和解决性能瓶颈,如何编写更高效的代码,如何利用Flex提供的工具来分析和优化应用程序的性能。这本书如果能提供一些关于Flex安全性的最佳实践,比如如何保护敏感数据,如何防止跨站脚本攻击等,那就更加完美了。我设想,这本书将不仅仅是关于Flex 3的API介绍,更是关于如何运用Flex 3去构建稳定、高效、可维护的应用程序的系统性指南。我期待从中学习到如何将Flex应用到企业级解决方案中,如何与其他技术栈协同工作,从而构建出真正有价值的产品。

评分

我拿到《Adobe Flex 3高级编程》这本书,首先映入眼帘的是书名传递出的专业性和深度。作为一名对Flex开发充满热情并希望不断精进的开发者,我一直在寻找能够带领我深入理解Flex内部机制的书籍。这本书听起来正是我所需要的。我希望它能详细阐述Flex的组件生命周期,包括组件的创建、渲染、销毁等各个阶段的处理,以及如何在这个过程中进行有效的干预和优化。在数据绑定方面,我期待它能超越基础的属性绑定,深入讲解更复杂的绑定场景,例如集合数据的绑定、跨组件的绑定,以及如何在绑定过程中处理异常和错误。对于创建和管理大型Flex应用程序,我特别希望这本书能提供关于架构设计和代码组织方面的指导,比如如何划分模块,如何实现组件的重用,以及如何利用设计模式来提高代码的可维护性和可扩展性。在用户体验优化方面,我渴望学习如何通过Flex实现更流畅、更具吸引力的用户交互,这可能涉及到动画效果的实现、异步操作的处理、以及如何构建响应式布局。这本书如果能包含一些关于Flex与后端服务集成的深度探讨,例如如何使用RemoteObject、HTTPService等,并讲解如何处理网络延迟和错误,那就非常有价值。我希望这本书能够帮助我解决在实际开发中遇到的各种棘手问题,让我能够自信地应对更复杂的Flex项目,并最终能够设计和开发出高性能、高可用的Flex应用程序。

评分

《Adobe Flex 3高级编程》这本书,对于我而言,它代表着从Flex 3的“使用者”向“精通者”的蜕变。我已经掌握了Flex 3的基础知识,但要构建真正出色的、具有企业级应用水准的Flex项目,我深知需要更深入的理解和更精湛的技艺。我希望这本书能够详细阐述Flex 3的运行时机制,例如事件处理的内部流程,组件的生命周期管理,以及如何通过这些机制来优化应用程序的性能和响应速度。在数据绑定方面,我渴望学习如何处理更复杂的绑定场景,例如如何实现双向绑定、集合绑定,以及如何在绑定过程中进行数据转换和验证。这本书如果能提供关于Flex 3架构设计和代码组织的最佳实践,例如如何利用模块化设计,如何实现组件的解耦,以及如何应用各种设计模式来提高代码的可维护性和可扩展性,这将对我非常有价值。我特别关注Flex 3与后端服务的集成,希望这本书能深入讲解如何使用各种通信方式(如RemoteObject, HTTPService),如何处理网络延迟和错误,以及如何实现数据的安全传输和存储。我期待这本书能够提供丰富的代码示例和实际项目经验,帮助我将理论知识转化为实实在在的开发能力,从而能够自信地应对各种复杂的Flex开发挑战,并构建出高性能、可扩展、用户友好的Flex应用程序。

评分

在我眼中,《Adobe Flex 3高级编程》这本书,不仅仅是一本技术手册,更像是一本通往Flex开发精髓的宝典。我迫切希望它能揭示Flex 3在构建企业级应用方面的潜力和最佳实践。特别是关于应用程序的可维护性和可扩展性,我希望能从这本书中学习到如何设计出优雅的架构,如何有效地组织和管理大量的代码,以及如何利用设计模式来应对不断变化的需求。在UI交互和用户体验方面,我渴望了解如何利用Flex 3创建更加动态、更加吸引人的界面,例如如何实现复杂的动画效果,如何进行数据可视化,以及如何构建响应式的用户界面。这本书如果能深入探讨Flex的内存管理和性能优化技术,那将是我最大的福音。我常常在开发过程中遇到性能瓶颈,希望能学习到如何有效地识别和解决这些问题,如何编写更高效的代码,以及如何利用Flex提供的工具来分析和监控应用程序的性能。此外,关于Flex与后端服务的集成,我希望能看到更深入的讲解,包括如何处理复杂的网络请求,如何进行数据验证和错误处理,以及如何实现安全的数据传输。我期待这本书能够提供一些实用的代码示例和项目经验,帮助我将所学知识转化为实际的开发能力,从而能够自信地应对各种复杂的Flex开发挑战,并为用户带来卓越的应用体验。

评分

当我看到《Adobe Flex 3高级编程》这本书时,我的大脑立刻开始思考它能为我带来哪些突破性的知识。在Flex 3的基础应用方面,我已游刃有余,但真正的挑战在于如何构建复杂、大规模、高性能的应用。我迫切希望这本书能够深入剖析Flex 3的架构设计,包括其事件模型、服务代理、以及如何构建可扩展的应用程序。在UI的交互性和用户体验方面,我期待学习如何利用Flex 3实现更精细的动画控制、更流畅的过渡效果,以及更具响应性的界面设计。这本书如果能提供关于Flex 3性能优化的详细指南,例如如何识别性能瓶颈,如何优化内存使用,如何提高数据加载速度,这将是我最大的收获。我希望它能深入讲解Flex 3与后端服务的集成,包括如何使用各种远程对象、HTTP服务,以及如何处理网络错误和数据同步。此外,关于Flex 3的自定义组件开发,我希望能学习到如何创建功能强大、可复用的组件,以及如何对现有组件进行深度定制。我设想,这本书将是一本集理论与实践于一体的指南,它不仅能解答我的疑惑,更能激发我的创造力,让我能够设计和开发出更具竞争力的Flex 3应用程序。

评分

当我在书架上看到《Adobe Flex 3高级编程》这本书时,我心中涌起一股强烈的求知欲。我已熟练掌握了Flex 3的基础语法和常用组件,但我深知,要成为一名真正优秀Flex开发者,还需要深入理解其核心机制和高级特性。我期望这本书能够为我揭示Flex 3的事件模型和消息传递系统,让我能够更有效地实现组件间的解耦和通信,从而构建出更加灵活和可维护的应用程序。在UI设计方面,我希望这本书能够教授我如何利用Flex 3创建更具吸引力和交互性的用户界面,例如如何实现复杂的动画效果,如何进行数据可视化,以及如何构建响应式的布局。对于性能优化,这是我一直在追求的领域,我希望这本书能够提供深入的指导,包括如何识别和解决性能瓶颈,如何优化内存使用,以及如何提高应用程序的整体响应速度。此外,关于Flex 3与后端服务的集成,我希望能看到更详细的讲解,包括如何高效地处理数据交换,如何实现数据的安全传输,以及如何应对网络异常。我设想,这本书将是我的一个得力助手,它能帮助我解决在实际开发中遇到的各种难题,让我能够构建出更强大、更具竞争力的Flex 3应用程序,并不断提升我的技术水平。

评分

评分

评分

评分

评分

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有