`
zengguo1988
  • 浏览: 280025 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Flex State对象

    博客分类:
  • Flex
阅读更多

 

在Flex 程序中,引入了状态设计的概念。在一个程序中,按照功能的需求,将界面切分成相对独立的部分。运行过程中,随着用户交互,界面在各个部分之间切换。比如在购物车程序中,登录界面、选购商品界面、购物车界面、付款界面,这些部分代表着不同的功能,显示当前程序的运行状态,每个界面便是一个状态(Status)。

 

在一个复杂的程序中,将程序按照功能进行结构划分是非常重要的,这样,问题会变得明了,这也是使用状态设计的原因。

 

其实,我们和状态打过很多交道,只不过没有把它理论化。比如,鼠标的点击动作,也是由几个状态组成的:鼠标移上、鼠标按下、鼠标松开、鼠标移开。用这种视角来分析问题,条理就很清楚,不容易陷入令人烦恼的逻辑纠纷中。

 

当状态发生改变时,我们可以为两个状态的切换添加形变动画。形变动画由若干个动画效果组成,可以理解为:状态的切换也是行为的一种,因此,形变动画的创建和使用与行为一样,非常简单。

 

在Flex中,状态的创建也是很简单的。我们不需要花费时间在界面的设计上,也不用去关心状态的运作方式,这些都由Flex来完成。

 

所有的组件都实现了状态机制,一般情况下,容器类组件或有容器特色的组件和状态机制是最佳组合,这样状态机制就可以控制程序的一个功能块。

 

请看实例demo.mxml的源程序:

<?xml version="1.0" ?>

<!-- Simple example to demonstrate the States class. -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>

        <![CDATA[

            import mx.controls.Alert;

            import mx.events.CloseEvent;

 

            private function clickHandler(event:Event):void {

                Alert.show("Do you want to save your changes?", "Save Changes", 3, this, alertClickHandler);

            }

 

            // Event handler function for displaying the selected Alert button.

            private function alertClickHandler(event:CloseEvent):void {

                 if (event.detail==Alert.YES)

                 {

                    //status.text="You answered Yes";

                    lable1.text = "Please Login!";

                    currentState='';

                 }

                 else

                 {

                     currentState='Register';

                    //status.text="You answered No";

                 }

            }

        ]]>

</mx:Script>           

    <!-- Define one view state, in addition to the base state.-->

    <mx:states>

        <mx:State name="Register">

            <mx:AddChild relativeTo="{loginForm}" position="lastChild">

                <mx:target>

                    <mx:FormItem id="confirm" label="Confirm:">

                        <mx:TextInput/>

                    </mx:FormItem>                    

                 </mx:target>

            </mx:AddChild>

            <mx:AddChild relativeTo="{loginForm}" position="lashChild">

                 <mx:target>

                    <mx:FormItem id="email" label="Email:">

                        <mx:TextInput id="emailId"/>

                    </mx:FormItem>

                </mx:target>

            </mx:AddChild>

            <mx:SetProperty target="{loginPanel}" name="title" value="Register"/>

            <mx:SetProperty target="{loginButton}" name="label" value="Register"/>            

            <mx:SetEventHandler target="{loginButton}" name="click" handlerFunction="clickHandler" />

 

            <mx:SetStyle target="{loginButton}" 

                name="color" value="blue"/>

            <mx:RemoveChild target="{registerLink}"/>

 

            <mx:AddChild relativeTo="{spacer1}" position="before">

                <mx:target>

                    <mx:LinkButton id="loginLink" label="Return to Login" click="currentState=''"/>

                </mx:target>

            </mx:AddChild>

        </mx:State>

    </mx:states>

 

    <!-- Define a Panel container that defines the login form.-->

    <mx:Panel title="Login" id="loginPanel" 

        horizontalScrollPolicy="off" verticalScrollPolicy="off"

        paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">

 

        <mx:Text width="100%" color="blue" id="lable1"

            text="Click the 'Need to Register?' link to change state. Click the 'Return to Login' link to return to the base state."/>

 

        <mx:Form id="loginForm" >

            <mx:FormItem label="Username:">

                <mx:TextInput/>

            </mx:FormItem>

            <mx:FormItem label="Password:">

                <mx:TextInput/>

            </mx:FormItem>

        </mx:Form>

 

        <mx:ControlBar>

            <mx:LinkButton id="registerLink"  label="Need to Register?"

                click="currentState='Register'"/>

            <mx:Spacer width="100%" id="spacer1"/>

            <mx:Button label="Login" id="loginButton"/>

        </mx:ControlBar>

 

    </mx:Panel>

</mx:Application>

 

这里在mx:states标签中添加了一对mx:State标签,用来定义一个状态,并命名为“detail”。在State对象可以使用如下方法:

 

l  SetEventHandler:设置对象某一事件的监听方法

 

l  SetProperty:设置对象的属性

 

l  SetStyle:设置对象的样式

 

l  AddChild:向对象添加一个子级元素

 

l  RemoveChild:删除一个子级元素

 

l  Transition:设置状态的过渡动画效果

 

当程序或组件切换到目标状态时,里面添加的方法就会被自动调用。

 

在上面的实例中,使用了AddChild和RemoveChild方法。其中AddChild的relativeTo属性表示目标容器,position表示新对象在容器中的位置,可选的值有before、after、firstChild和lastChild。

 

<mx:AddChild relativeTo="{contentPanel}" position="lastChild" creationPolicy="all">

 

      ……

 

</mx:AddChild>

 

position 默认是lastChild,表示在所有子级元素的最后;firstChild表示添加在目标的所有子级元素最前面;before和after分别表示添加到对象的所在容器中,处于对象位置的前面和后面。在添加对象时,creationPolicy可以控制对象对子级元素的显示操作,可选的值有:all, auto,none和queued。all表示总是创建对象;auto表示只有需要对象时才创建;queued表示将对象放在等待创建的队列中,对象完成初始化再开始创建子级元素;none则表示不创建对象,直到调用了createComponentsFromDescriptors函数时才创建它。默认为auto,有时为了强迫对象总是显示出来,可以设为all。如果没有特殊的需求,设为all就可以了。

 

RemoveChild使用起来比较简单,只要指定目标即可:

 

<mx:RemoveChild target="{img}"></mx:RemoveChild>

 

这条语句表示删除img对象。

 

在使用State对象时,currentState属性代表了当前对象的状态,利用它我们可以很方便地操作状态的切换。在函数changeState中,就是利用currentState来改变状态的:

 

//判断当前状态,状态默认为空值

 

if(currentState == "detail"){

 

    currentState = "";          //切换到默认状态         

 

    btn.label = "了解详情";      //修改按钮的文字

 

}else{

 

    currentState = "detail";    //切换到detail状态      

 

    btn.label = "返回简介";

 

}

 

在从默认状态切换到“detail”状态时,<mx:State name = "detail">…< mx:State>标签内的代码开始执行。如果再次返回默认状态,所有的物件仍会恢复原貌。也就是说,“detail”状态下通过 AddChild、RemoveChild等进行的修改不会影响默认状态,被删除的物件仍然还在。 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/YooLive/archive/2008/05/08/2417661.aspx

 

 

个人博客正式上线,欢迎访问

 

分享到:
评论
2 楼 流浪的面包树 2009-08-05  
我也觉得State到底有什么好的。。。。。。。不过FLEX 4出来 就强化了State 了
1 楼 民工精髓 2009-08-05  
有个疑问,一直没明白State的优点在哪里?AddChild这种,跟开始的时候就全部写好几个界面放在ViewStack里面,感觉还要麻烦一些啊?

相关推荐

    了解 flex State对象

    Flex State对象是Adobe Flex框架中的一个关键特性,它允许开发者管理应用程序的不同视图或界面状态。在Flex程序中,状态设计是一种强大的工具,用于根据用户的交互和应用需求动态地改变UI布局和组件行为。通过使用...

    flex-最简单的state对象控制

    根据提供的文件信息,本文将详细解释“Flex中最简单的State对象控制”这一主题。该主题主要涉及如何通过Flex框架中的State管理机制来实现不同界面状态之间的切换。以下将围绕标题、描述以及部分代码内容进行深入解析...

    FLEX入门实例--------transition,state的综合运用

    在本实例中,我们将深入探讨Adobe Flex中的"transition"(过渡)和"state"(状态)的概念,这两个概念是创建动态且交互性丰富的用户界面的关键元素。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,它...

    Flex Service

    Web服务可以是SOAP(简单对象访问协议)或RESTful(Representational State Transfer)风格的服务,这两种都是Web服务的常见标准。 1. Flex与SOAP Web服务的整合: SOAP是一种基于XML的协议,用于在分布式环境中...

    FLex 物品分类游戏

    5. **状态管理**:游戏可能有多个阶段或状态,Flex的State机制可以方便地切换UI布局和行为,适应不同游戏阶段的需求。 6. **XML数据存储**:游戏物品信息可能以XML格式存储,利用Flex的XML类进行读取和解析,便于...

    Flex语言开发介绍及实例

    3. REST(Representational State Transfer):一种网络应用程序的设计风格和开发方式,Flex应用可以通过HTTP协议与RESTful服务交互,获取和更新远程数据。 4. FLEX:即我们讨论的Flex框架,用于构建RIA,通过AMF...

    Flex 简单的几个实例 

    而State Transitions是Flex中用于管理组件状态和过渡效果的重要工具。 二、Flex的状态管理 在Flex中,状态管理允许我们根据应用程序的不同阶段或用户操作定义不同的组件布局和可见性。例如,一个应用程序可能有...

    flex+php.rar_Flex+PHP_PHP Flex_felx p_flex_flex php

    - Flex项目通常使用MXML和ActionScript进行开发,MXML用于定义UI组件,而ActionScript则是面向对象的编程语言,用于处理逻辑和事件处理。 - Flex SDK提供了一系列组件,如Button、Label、List等,开发者可以通过...

    flex+java增删改查(spring+jpa)简单例子

    标题 "flex+java增删改查(spring+jpa)简单例子" 暗示了这是一个关于使用Adobe Flex作为前端UI框架,与Java后端结合,实现数据的CRUD(创建、读取、更新、删除)操作的教程。在这个场景中,Java后端使用Spring框架...

    关于flex中query查询

    查询的执行通过调用`execute`方法来完成,该方法接受两个参数:一个是`Query`对象,另一个是异步响应处理函数。 ##### 示例代码: ```as3 private function doQuery():void { queryTask.execute(query, new ...

    我的flex资料1

    6. **Flex应用结构**:了解Flex应用的基本结构,包括Application、Module、State等,有助于组织和管理大型项目。 7. **Adobe AIR**:如果你打算开发桌面应用,需要了解Adobe AIR,它是将Flex应用部署到桌面环境的...

    FlexGrocer.rar_flex

    1. **Flex编程基础**:Flex是基于ActionScript语言和MXML标记语言的,ActionScript是基于ECMAScript的一个面向对象的语言,用于处理动态行为和交互逻辑;MXML则用于定义用户界面布局和组件结构。 2. **Flex SDK**:...

    flex3ria开发

    7. **State Management**:Flex应用可以有多个状态,根据应用的不同阶段显示不同的界面,方便管理复杂的用户界面。 8. **Layout Managers**:帮助组织和排列组件,确保界面在不同屏幕尺寸和分辨率下都能正确显示。 ...

    flex4实战 代码

    1. **ActionScript 3.0**: Flex4的主要编程语言,它是一个面向对象的语言,基于ECMAScript 3,并进行了很多增强,如类型系统、错误处理和性能优化。 2. **MXML**: MXML是一种声明式语言,用于创建用户界面,类似于...

    Flex制作类似1942的游戏

    游戏状态的切换可以通过Flex的State管理实现。 10. **优化与性能**:考虑到游戏的流畅性,我们需要关注性能优化,比如对象复用(对象池)、适当的缓存策略、避免不必要的计算和内存泄漏。 以上是使用Flex开发类似...

    FLEX数据传输与交互

    3. State管理:FLEX支持状态管理,允许为不同的应用场景定义不同的视图状态。这在实现复杂的用户交互和动态界面时非常有用。 五、事件驱动编程 FLEX是事件驱动的,所有的用户交互和网络通信都以事件的形式进行。...

    整合flex 和java

    4. **SOAP和RESTful服务**: Flex还可以通过HTTP访问Java提供的SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)服务。通过这两种方式,Flex可以与Java Web服务进行通信。 5. **...

    Flex HTTPService如何给后台传递参数 .doc

    这种方法更适合XML格式的数据交换,并且可以配合`mx:State`进行状态管理。以下是一个简单的示例: ```xml &lt;user&gt;{httpEncoding("用户名']} &lt;psw&gt;{httpEncoding("密码']} ``` 在这个例子中,`&lt;mx:request&gt;`...

    Flex和.NET通信

    这种通信模式通常利用Web服务技术,如SOAP(Simple Object Access Protocol)或REST(Representational State Transfer),为Flex应用程序提供与.NET服务器之间的数据交互。 在Flex中,我们可以使用AS3...

Global site tag (gtag.js) - Google Analytics