Flex 历史管理

    技术2022-05-19  22

    使用历史管理,用户可以用浏览器的后退和前进按钮来导航程序。比如,用户可以单击TabNavigator或者 Accordion容器的选项卡,然后单击浏览器的后退按钮回到先前的选项卡。

    Flex中的所有导航容器都自动支持历史管理。如果想关闭这些容器的历史管理,只要把其historyManagementEnabled属性设置为false即可。如下所示:

    <mx:TabNavigator historyManagementEnabled = “false”>

    ViewStack容器的历史管理默认情况下是禁用的。

     

    特别要注意的是在预览本地文件时,IE不能启用历史管理,只有将文件部署到Web服务器或是通过HTTP URL 访问文件才能启用

     

    当然也可以构建自定义的历史管理器,

    自定义管理类实现的6个步骤:

    (1)    HistoryManager类注册该组件。

    (2)    在该组件中实现loadState()方法。

    (3)    在该组件中实现saveState()方法。

    (4)    在该组件实现toString()方法。

    (5)    调用HistoryManager类的各种静态方法。

     

     

    如下所示:

    这是自己参考的《Flex 权威指南》,没写详细,真正用的时候还得查阅具体资料。

    <?xml version="1.0" encoding="utf-8"?>

    <mx:HorizontalList xmlns:fx="http://ns.adobe.com/mxml/2009"

                     xmlns:s="library://ns.adobe.com/flex/spark"

                     xmlns:mx="library://ns.adobe.com/flex/mx"

                     implements="mx.managers.IHistoryManagerClient"

                     creationComplete="registerWithHistoryManager()" height="142" width="492" dataProvider="{dataArr}">

        <fx:Script>

           <![CDATA[

               import mx.collections.ArrayCollection;

               import mx.managers.HistoryManager;

               import mx.managers.IHistoryManagerClient;

     

               [Bindable]

               private var dataArr:ArrayCollection = new ArrayCollection([{name:'laopo'}, {name:'yaner'}]);

              

               private function registerWithHistoryManager():void

               {

                  //HistoryManagersave()方法保存了组件的当前状态,在第一次注册组件时,必须调用save()方法。

                  HistoryManager.register(this);

                  HistoryManager.save();     

               }

              

               /**实现saveState方法*/

               public function saveState():Object{

                  var state:Object = new Object();

                  state.selectedIndex = this.selectedIndex;

                  return state;

               }

              

               /**实现loadState方法*/

               public function loadState(state:Object):void

               {

                  var newIndex:int;

                  if(state){

                      newIndex = int(state.selectedIndex);

                  }else{

                      newIndex = -1;

                  }

                  if(newIndex != selectedIndex){

                      selectedIndex = newIndex;

                      //派发事件

                  }

               }

              

           ]]>

        </fx:Script>

        <fx:Declarations>

           <!-- 将非可视元素(例如服务、值对象)放在此处 -->

        </fx:Declarations>

    </mx:HorizontalList>


    最新回复(0)