Flex3实战 读书笔记(二)

事件
可以将事件形成(从应用程序根级组件到分派组件,再到根级组件)分为几个阶段。根据事件在传播过程中的位置,可以分为如下3个阶段。
1. 捕获(Capture):应用程序将时间发送到分派组件(dispatcher)。
2. 冒泡(Bubbing):事件从分派组件发送回应用程序。
3. 目标(Target):即事件已经到达其目标(即分派组件)。
在这三个阶段中,冒泡阶段用得最多。捕获阶段使用较少,除非需要检查并实现截获事件。
在捕获阶段侦听事件比在冒泡阶段的速度慢一些。如果在捕获阶段侦听的事件过多,应用程序很可能因此而运行缓慢。通常,创建的大多数事件侦听器都在冒泡阶段使用。

Flex事件由下列信息段构成:
Event.target:分派组件。
Event.currentTarget:当前包含并检查事件的组件。
Event.type:识别事件类型的字符串。
Event.eventPhase:事件在当前所处的阶段。
使用ActionScript的addEventListener()函数不仅可以对事件进行更精细地控制,而且也是在ActionScript代码中侦听组件分派的事件的唯一途径。使用ActionScript为组件添加的事件侦听器可以被移除,但不能在MXML中移除。
如果想在冒泡阶段之外的其他阶段侦听事件,也必须使用这个ActionScript方法来添加侦听器。
Flex事件如此强大的原因之一,是允许开发人员创建并使用自定义警报与应用程序通信。通过在数据变化或用户执行某些操作时发送事件,可以实现应用程序逻辑与使用这些逻辑的对象的分离。这种分离有助于用用程序结构的模块化,即一个组件的改变不会影响其他部分。
在发送自定义事件时,要使用对象的dispatchEvent()方法。

停止事件传播
在任何时间阶段(捕获、目标或冒泡)都可以使用stopPropagation()和stopImmediatePropagation()方法停止其他组件传播。这两个方法本质上是相同的,区别仅在于是否允许同一组件上的其他事件侦听器接受相应的事件。
换句话说,如果在事件上调用event.stopPropagation()方法,它会在给定组件上的所有其他事件侦听器完成对这个事件的响应之后停止时间传播。如果使用event.stopImmediatePropagation()方法,事件会在传播到其他任何时间侦听器之前被停止,即使这些事件侦听器侦听道德都是同一个组件。

应用程序导航
导航组件:Menu、MenuBar、TabBar、TabNavigator、Accordion
为菜单和菜单栏配置数据的方式有很多。但是,如果只能选择一种方式,应该选择XMLListCollection。
Flex中的组件通常都有MXML和ActionScript两个版本,但菜单却没有MXML组件,只能使用ActionScript设置和显示菜单。

弹出式窗口
所有弹出式窗口都是通过弹出式窗口管理程序创建和管理的。弹出式窗口管理程序是一个类,他负责初始化窗口并管理窗口在应用程序中的分层布局,目的是帮助开发人员避免布置和安排窗口中可能的冲突。
在创建弹出式窗口时,可以选址一个容器组件作为弹出式窗口的基础(也成为基础标签)。最常见也容易使用的基础标签是TitleWindow。
模态窗口会限制用户只能在弹出式窗口的范围内单击鼠标,即不允许在窗口的边框之外单击鼠标。在将弹出式窗口显示为模态窗口的情况下,发生在弹出式窗口外部的单击都会被忽略(不能因此返回主应用程序窗口)。
从技术角度看,createPopUp()方法创建和初始化对象,而addPopUp()则取得先前已经初始化的对象并将其添加到显示列表中。
一般来说,所有事件的工作原理都一样,但弹出式窗口发送的时间有所不同。弹出式窗口的事件不会沿继承链传播到应用程序的根节点。相反,弹出式窗口分派的事件传播到窗口的根节点即停止。
从窗口中取得数据的更好方式是通过用户触发的事件,即当事件被触发时,把表单元素中的数据复制到一个窗口对象的属性中,然后再从这个属性中提取数据。另一种方式是在编辑完后,将数据保存到窗口分派的事件对象中。

视图状态
基础或默认视图指的是在应用程序中编写逐渐的初始状态。其他状态都是在初始状态基础上,通过设置属性、一组或添加子对象定义而成的。
通过设置组件或应用程序的currentState属性改变视图状态。
使用baseOn属性,可以基于其他状态构建新状态,并且重用源状态的属性。
在状态改变时,可以针对特定对象应用过渡;而使用过渡来组织和排队效果,能够有效控制效果播放的事件和循序。

使用数据服务
Flex提供不同的方法和对象(remoteObject、WebService、HTTPService和URLLoader等),把数据传送给应用程序。
大体而言,每个Web服务组件的工作原理都很相似。首先,通过传入Web服务的位置(或URL)初始化组件;然后设置变量并调用操作名或send()函数,以执行命令。最后等待ResultEvent(或者,如果事情没有按计划顺利完成,FaultEvent)已确定是否成功返回响应。如果成功获得相应数据,就可以在应用程序的组件中使用这些数据。

创建自定义组件的关键在于封装,应该通过减少自定义组件对应用程序工作方式的了解程度确保其可以重用;而自定义组件本身也应该尽可能保持独立,以便在多个应用程序中使用。如果你创建的自定义组件不关心会被谁调用以及调用者的目的,而且调用者也不用关心自定义组件的内部实现,我们就要恭喜你了。

SWC文件包含类、资产(asset)和组件的容器,你讲这些资源放入SWC文件供重构。SWC文件类似于.jar文件
一个SWC就是一个共享库,可以通过静态或动态的方式应用。在静态方式下,要把SWC中的一切资源都嵌入到最终的SWF文件中。从应用程序开发角度看,如果类和资产(如图像)要在多个应用程序中使用,这种方式会导致SWF文件比较大。
动态链接就是把SWC作为RSL的方式(也是更值得推荐的方式),即在运行期间根据需要加载类。

你可能感兴趣的:(应用服务器,Flex,嵌入式,读书,actionscript)