flex framework 是一个十分精细与复杂的架构,在轻松将组件(controls / containers) 拖拉到画面上就能构成一个 appliction ui的背后,其实是这个 framework 在暗地里提供了许多底层的服务,才能让整个flex 应用程序顺利启动与执行。
上面这张图是从比较高的位置来鸟瞰一支 flex app时所看到的架构。
简单的说明如下:
*每当开启一支 flex app swf 时,最先被加载并执行的并不是程序(controls/containers),而是 SystemManager,它有点像是操作系统中的 Boot Loader,Loader加载后才能 bootstrap 后面的每一道手续起来。
*当 SystemManager 加载并启动后,最先显示在画面上的就是 Preloader,也就是灰色的 progress bar,这是因为此时 SystemManager 正在下载其它需要的组件与 class library。
*等程序所需的 class library都下载完成后,progress bar 就功成身退,此时SystemManager 就会建立 Application 组件。
*Application组件是整支 app的最底层,至少所有 UI 面的组件(例如 panel, button, chart…)都置于这个 Application组件中,所以说的更明白一点就是:在flex中,所有东西都是组件,一层包一层,而往上trace到最根本就是这个 Application组件。
*同一时间,SystemManager 也会建立 Cursor Manager负责管理各种 cursor,例如显示 arrow、hand等不同的图示,当然如果你想隐藏鼠标光标,也可以由这里下手。
*Drag Manager则是专门负责各种拖拉行为,例如 flexstore里面把商品拖放到购物车里,就是靠 Drag Manager去启始拖拉,并置换 Drag Proxy图案,然后侦测鼠标的位置来显示不同的鼠标(例如绿色的勾勾,红色的叉叉)
*PopUp Manager 是处理各种需要跳到最上层窗口的地方,例如 Alert window, 或 TitleWindow等需要置于最上层的组件,就是靠 PopUpManager.createPop()去建立,同时它也可以提供 modal window的服务,也就是在 window下方产生一大片白色吃掉所有的鼠标反应,这部份的 code base 基本上跟 flash 8里面没有太大不同,这篇里有相关介绍,唯一的差别是由于 flash 8 的 Bitmap API提供了 catchAsBitmap指令因此可以顺便加些 blur/dissolve效果上去。
*ToolTip Manager 则是负责显示所有的提示文字,它的实作也很简单,当鼠标 rollover 任何一个对象时,framework会去探询该对象是否有 obj.tooltip=”xxx” 这样的属性,如果有,就交给 ToolTip manager去画一个黄色背景的框框将文字显示出来,并且在一定时间后 fade out。
上面介绍的这六个东西就是一般在撰写 flex 2 application 时工程师最需要了解的基本的结构,一旦熟悉这个架构后,就可以解释许多疑问,例如:
Q:为什么 Cairngorm 里面的 CairngormEvent 从 TitleWindow发出后,无法像其它地方一样向上 bubbling 到 Application 然后被 controller 接收?
A:因为 TitleWindow 是透过 PopUpManager 直接建立并附加到 SystemManager身上,因此 CairngormEvent 向上 bubbling 后最终落点是在 SystemManager而非 Application,因此收不到。那解决方法为何?请大家想想吧。
Q:如果我想做 ShortCut Manager,能侦听并处理所有的 shortcut key该如何下手?
A:从这个架构图来看,可能的下手地方有三个,第一是在 SystemManager里面侦听所有的 keyDown event然后做解析;第二是在 Application 里面侦听并处理,第三则是直接操作 flash.display.InteractiveObject 这个class去处理所有的 key event。
其它诸如此模拟较牵涉到 low-level system architecture的问题还有很多,但只要先彻底了解 flex 2 framework 的架构与运作原理,许多问题就会自然解决了。
分享到:
相关推荐
《S2Flex2-1.1.0:Seasar2框架与Flex交互的深度解析》 在现代Web应用开发中,交互性和用户体验是至关重要的因素。S2Flex2-1.1.0是一个专为Flash播放器设计的软件库,它使得开发者能够利用Adobe Flex这一强大的...
2. JavaScript调用Flex JavaScript调用Flex方法的步骤首先是注册Flex中的AS方法为可被JavaScript调用。这通过`ExternalInterface.addCallback`完成: ```xml <![CDATA[ import flash.external....
2. ActionScript 3.0:Flex 2采用了ActionScript 3.0,提供了更强大的类型系统、错误处理机制和事件模型,使得代码更加健壮且易于维护。 3. 组件库:Flex 2提供了丰富的预定义组件,如按钮、列表、表格等,可以快速...
Flex体系架构是Adobe公司开发的一款用于构建富互联网应用程序(Rich Internet Applications, RIA)的技术框架。Flex以其强大的组件模型、丰富的用户体验以及与后端服务的高效集成,深受开发者喜爱。本篇文章将深入...
2. **ActionScript**: Flex API基于ActionScript编程语言,这是一种面向对象的语言,与JavaScript类似,但提供了更强大的类型系统和面向对象特性。ActionScript用于编写Flex应用程序的逻辑层。 3. **MXML**: MXML是...
Flex体系架构深度剖析 Flex是一种基于ActionScript和Flash Player或Adobe AIR运行时的开放源代码框架,用于构建富互联网应用程序(RIAs)。Flex为开发者提供了丰富的用户界面组件库,能够创建具有互动性和动态性的...
- **组件导航**:Flex2StyleExplorer提供了一个组件层次结构,用户可以逐级深入查看每个组件及其子组件的样式。 - **资源管理**:工具还支持管理应用内的图像、字体和其他资源,确保样式与资源的对应一致。 3. **...
Flex2基于事件驱动的架构,允许用户与应用进行交互。每个组件都可以发出事件,而事件处理器则响应这些事件,执行相应的操作。理解事件模型是掌握Flex2编程的关键。 8. **Flex Builder IDE** Adobe Flex Builder是...
Flex MVC架构图是一种用于构建富互联网应用程序(RIA)的架构模型,主要应用于Adobe Flex开发中。Flex是一个开源框架,允许开发者使用MXML和ActionScript创建交互式的、基于Flash的用户界面。MVC(Model-View-...
在Flex中,组织结构图组件是用于展示层次数据,如公司组织架构、文件系统或任何具有层级关系的数据集合的工具。这种组件能够以图形化的方式帮助用户理解复杂的关系。 标题“flex的组织结构图组件”指的是一种特定的...
《Flex 2 Developer’s Guide》是Adobe官方发布的一本针对Flex 2开发者的详尽指南,旨在帮助开发者深入了解和熟练运用Flex 2框架进行富互联网应用程序(RIA)的开发。Flex 2是一款强大的开发工具,它基于...
在IT行业中,尤其是在前端开发领域,`Flex`布局和`Tree`数据结构是两种非常重要的概念。本篇文章将深入探讨如何在Flex环境中自定义实现一个具备展开、收缩功能的多级目录树形结构。 首先,让我们理解`Flex`布局。...
4. **组件体系**:详述Flex 2内置的组件库,如Button、Canvas、Form等,以及如何自定义组件。 5. **数据绑定**:解释如何实现视图和模型之间的动态数据绑定,使得UI自动反映数据的变化。 6. **图形和动画**:讲述...