• flex4里的的状态(State)——2


    与状态有关的事件

    下面接收4个与状态有关的事件:

    • enterState:进入一个新状态后触发,触发者是state object和组件。
    • exitState:一个状态将要离开时触发,触发者是state object和组件。
    • currentStateChanging:在状态即将改变时触发。它被一个currentState属性值改变的组件触发。你可以利用这个事件向服务器请求即将被新状态用到的数据。
    • currentStateChange:在一个状态已经完全改变了后触发。你可以利用这个事件向服务器发回一个数据,指明用户当前的状态。
    看个实例好了!
    <?xml version="1.0"?>
    <!-- states\StatesSimpleEvent.mxml -->
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/halo"
    xmlns:s="library://ns.adobe.com/flex/spark">
    <s:states>
    <!-- Define the new view states. -->
    <s:State name="default"
    enterState="MyEnterTA.text = 'Enter state: default';"
    exitState="MyExitTA.text = 'Exit state: default';"/>
    <s:State name="NewButton"
    enterState="MyEnterTA.text = 'Enter state: NewButton';"
    exitState="MyExitTA.text = 'Exit state: NewButton';"/>
    </s:states>
    <s:VGroup id="g1">
    <s:HGroup>
    <s:Button id="b1" label="Click Me"
    enabled.NewButton="false"/>
    <s:Button id="b2" label="New Button"
    includeIn="NewButton"/>
    </s:HGroup>
    <s:Button label="Change to NewButton state"
    click="currentState='NewButton';"/>
    <s:Button label="Change to default view state"
    click="currentState='default';"/>
    <s:TextArea id="MyEnterTA"/>
    <s:TextArea id="MyExitTA"/>
    </s:VGroup>
    </s:Application>

    用浏览器切换状态

    Flex browser manager能够让用户通过浏览器的前进后退按钮来导航应用。因为这个browser manager能够对状态的切换进行跟踪。    

    以前说过,每个状态是个新的界面,而不是一个新的页面。但是用浏览器也能实现不同状态之间的切换。如何做到呢?先看看背景知识。

    BrowserManager:一个 Singleton 管理器,用于充当浏览器和应用程序之间的代理。使用它可以访问浏览器地址栏中的 URL,这与访问 JavaScript 中的 document.location 属性类似。它有一个getInstance() 方法,返回的是一个IBrowserManager类的实例。
    IBrowserManager:由 BrowserManager 的共享实例实现的接口。init()方法:初始化 BrowserManager。fragment属性:当前 URL 显示在浏览器地址栏中时,“#”之后的部分。
    看个实例
    <?xml version="1.0"?>
    <!-- states\StatesBrowserManager.mxml -->
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/halo"
    xmlns:s="library://ns.adobe.com/flex/spark"
    creationComplete="initApp();">
    <fx:Script>
    <![CDATA[
    import mx.managers.BrowserManager;
    import mx.managers.IBrowserManager;
    import mx.events.BrowserChangeEvent;
    import mx.utils.URLUtil;
    // The search string value.
    [Bindable]
    public var searchString:String;
    // 一个 BrowserManager 类的实例.
    private var browserManager:IBrowserManager;
    //在应用创建完成时初始化 BrowserManager.
    public function initApp():void {
    browserManager = BrowserManager.getInstance();
    browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, parseURL);
    browserManager.init("", "Browser Manager for View States");
    updateURL('default');
    }
    // 当用户按前进后退按钮时触发事件,事件处理器从URL里接到状态的值,从而。用他
    //设定当前状态。
    private var stateFromURL:String;
    private function parseURL(e:Event):void {
    var o:Object = URLUtil.stringToObject(browserManager.fragment);
    stateFromURL = o.state;
    currentState=stateFromURL;
    }
    // 状态改变时改变地址。
    private function updateURL(myCurrentState:String):void {
    var s:String = "state=" + myCurrentState;
    browserManager.setFragment(s);
    }
    // 当按下go按钮时执行该方法。
    // 它会改变状态以及调用updateURL()方法来改变URL。
    public function doSearch():void {
    currentState = "results";
    updateURL('results');
    searchString = searchInput.text;
    }
    // 点击reset按钮时执行该方法,该方法是状态改到默认值,。并且改变URL
    public function reset():void {
    currentState = '';
    searchInput.text = "";
    searchString = "";
    updateURL('default');
    }
    ]]>
    </fx:Script>
    <s:states>
    <!-- The state for displaying the search results -->
    <s:State name="default"/>
    <s:State name="results"/>
    </s:states>
    <!-- In the default state, just show a panel
    with a search text input and button. -->
    <s:Panel id="panel1"
    title="Search" title.results="Results"
    resizeEffect="Resize"
    width="10%" height="10%"
    width.results="100%" height.results="100%">
    <s:layout>
    <s:VerticalLayout/>
    </s:layout>
    <s:SkinnableContainer id="searchFields" defaultButton="{b}">
    <s:layout>
    <s:HorizontalLayout/>
    </s:layout>
    <s:TextInput id="searchInput"/>
    <s:Button id="b"
    label="Go"
    click="doSearch();"/>
    <s:Button includeIn="results"
    label="Reset"
    click="reset();"/>
    </s:SkinnableContainer>
    <s:SimpleText includeIn="results"
    text="Search results for {searchString}"/>
    </s:Panel>
    </s:Application>
    有点长哦!
    在这个实例中,当用户改变状态时,updateURL()就会将相应的地址写到浏览器的地址栏,当按浏览器的前进或者后退按钮时,parseURL()方法会从URL中获得当前状态值,并且改变状态。


  • 相关阅读:
    网络分析[3] 发布NAServer到ArcGIS for Server(以Server 10.4为例)
    Vuejs环境安装与工程建立【小白Windows向】
    【C语言学习】-05 二维数组、字符串数组、多维数组
    【C语言学习】-04 一维数组、字符数组
    【C语言学习】-03 循环结构
    【C语言学习】-02 分支结构
    【C语言学习】-01 C基础
    ios layoutsubView 何时被调用
    Xcode 断点调试,取消直接进入到汇编语言界面处理
    一步一步实现iOS应用PUSH功能
  • 原文地址:https://www.cnblogs.com/orchid/p/1526310.html
Copyright © 2020-2023  润新知