在flex中,state的概念类似于flash中的场景,一个场景对应着一个界面,在一个复杂的flex应用中,可能会有很多场景,在flash中可以利用时间线来管理场景,而在flex中只得通过手工管理管理state,经过一段时间探索我发现利用策略模式管理这些state不失为一种优雅的方法,方案如下:
1 建立策略接口,在这里把state抽象为做2件事,doLogic():对目标(舞台)数据进行一些必要的逻辑处理,doRender():对目标(舞台)的显示列表做必要的修改和填充。
package
{
public interface IState{
function doLogic():void;
function doRender():void;
}
}
2 定义通用策略,实现一些通用部分,比如异常处理。
package
{
public class AbstractState implements IState
{
protected var target:StateManage;
public function AbstractState(aTarget:StateManage){
target = aTarget;
}
public function doLogic () : void {
throw new Error ("抽象方法应被重载");
}
public function doRender () : void {
throw new Error ("抽象方法应被重载");
}
}
}
3 建立具体的策略类,负责具体的state,在这里doLogic()通过向目标发送消息修改了目标数据message, doLogic()向目标发送消息修改目标的显示列表。类似可以再建立更多的具体策略类:state2……stateN。
package
{
public class State1 extends AbstractState implements IState{
public function State1(aTarget:StateManage){
super(aTarget);
}
override public function doLogic():void {
target.message="现在是状态1";
}
override public function doRender():void {
target.title.text=target.message;
}
}
}
4 至此state的设计完毕了,写个main文件测试下,运行后点击改变状态按钮,则应用在state1和state2中来回切换。可以在该模式下对应用进行扩展从而达到比较复杂的场景展示。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="onCreationComplete(event);">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
private var _state:IState;
public var message:String;
private function onStateChange(aEvent:MouseEvent):void {
if(_state is State2){
_state = new State1(this);
} else if(_state is State1){
_state = new State2(this);
}
_state.doLogic();
_state.doRender();
}
private function onCreationComplete (aEvent:FlexEvent):void {
_state = new State1(this);
_state.doLogic();
_state.doRender();
toggle.addEventListener(MouseEvent.CLICK,onStateChange);
}
]]>
</mx:Script>
<mx:Text id="title" x="194" y="23" width="152" fontSize="18" color="#F9210B"/>
<mx:Button id="toggle" x="457" y="21" label="改变状态" fontSize="12"/>
</mx:Application>
分享到:
相关推荐
目前,瘦客户端开发模式已成为WebGIS的主流,尤其是B/S架构的WebGIS。 然而,随着互联网的普及和GIS应用的广泛,用户期望WebGIS能拥有类似C/S架构的应用体验。这时,RIA(富互联网应用系统)应运而生,它结合了桌面...
在课程设计中,你需要实现一个编译器,能够处理逆波兰表示法的输入,用算符优先法解析表达式,并利用正则图进行词法分析。这个过程中,你可能需要编写词法分析器(lexer)来生成标记流,然后是语法分析器(parser)...
他分析了不同的盈利策略,如提供支持服务、开发专有插件、创建订阅模式等,这些都是基于开源项目建立成功企业的关键。这对于有兴趣将开源项目转化为商业机会的开发者来说,是一篇必读的文章。 ##### 11. 突出人物...
- **利用Flex**:Adobe Flex框架支持构建丰富的互联网应用。 - **利用Silverlight**:Microsoft Silverlight平台支持创建跨平台的应用程序。 - **通过服务器端和桌面编程使用REST API**: - **利用Python**:...
Flex布局是一种简洁的布局方式,它可以轻松地实现垂直和水平对齐、交叉轴对齐以及项目间的空间分配,非常适合于响应式设计。 ### CSS垂直居中 CSS设置垂直居中有多种方式,例如使用Flexbox布局的justify-content、...
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,由Roy Fielding在2000年提出,主要用于构建Web服务。REST的核心思想是将资源作为服务的中心,通过HTTP协议进行CRUD(创建、读取、...
JSONP通过动态插入`<script>`标签实现,CORS服务器端设置允许跨域头,IFrame利用不同源策略,WebSocket协议自带跨域功能。 10. **控制台输出**:输出5个9,因为`setTimeout`是异步执行,`for`循环先执行完再依次...
21. **同源策略与跨域**:同源策略限制了浏览器的AJAX请求,跨域通过CORS、JSONP等方式解决。 22. **UI样式**: - `scoped`属性:限制CSS仅在当前组件内生效。 - UI组件库:Element UI、Vuetify、Quasar等。 - ...
- **缓存策略**:利用浏览器缓存。 - **CDN**:使用内容分发网络来提高资源的加载速度。 - **代码拆分**:使用webpack等工具按需加载代码。 ### Progressive Web App(PWA) PWA是一种混合了传统网站和移动应用...
综上所述,实现"React灵敏"涉及多个方面,包括使用JSX和CSS技术进行响应式设计,选择合适的布局策略,以及适当地使用React的状态管理和第三方库。掌握这些知识点对于构建适应各种设备的React应用至关重要。
有些工具可以帮助生成词法分析器,如Flex(一种广泛使用的词法分析器生成器),它可以读取描述词法规则的文件(通常以`.l`扩展名),然后生成C或C++代码,该代码能实现词法分析功能。 8. **错误处理** 在词法分析...
【标题】"Angular多布局示例yjp9qy"是一个使用StackBlitz开发平台创建的项目,旨在展示如何在Angular应用中实现多种布局模式。StackBlitz是一个在线的集成开发环境,支持快速构建和协作Web应用,尤其适用于Angular、...
REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序,特别适用于Web服务,强调资源的表述和状态转移。Symfony 4是Symfony框架的一个稳定版本,提供了强大的工具和组件,简化了...