使用HistoryManager

说到深层链接(Deep linking),少不了要讲一讲Flex 2中的HistoryManager。利用HistoryManager,用户可以使用Web 浏览器的后退和前进导航按钮在Flex 应用程序中导航,与Flex 3中的BrowserManager功能相似。

通常情况下,应使用BrowserManager类和深层链接来维护Flex 应用中的状态并处理URL和浏览器历史记录。但有些导航器容器(如Accordion和TabNavigator)默认情况下启用历史记录管理功能,因此这种情况下会比使用BrowserManager简单。但对于其他组件和容器,我们需要自定义历史记录管理,相对复杂,因此更多时候不使用HistoryManager类。

我们可通过将上述导航器容器的historyManagementEnabled 属性设置为false来禁用历史记录管理。要向HistoryManager 类注册一个组件,需要调用HistoryManager 类的register()方法,还必须实现 IHistoryManagerClient 接口的saveState()loadState()方法。

点击查看实例效果,点击下载该实例源码。

创建自定义列表框后,我们必须向HistoryManager类注册其实例。一般是在creationComplete事件处理函数中注册,如下面的代码:

creationComplete=”mx.managers.HistoryManager.register(this);”

IHistoryManagerClient接口要求在列表框中实现saveState和loadState方法。当该列表框的选项一更改,将调用listChanged方法,该方法会调用HistoryManager的save方法来保存用户当前选择的哪一选项。保存完成后会调用saveState方法,而该方法将返回一个对象来保存浏览器记录。在本例中,saveState方法返回属性为selectedIndex的对象,该属性值等于自定义列表框的选项索引。

当使用后退和前进导航按钮更改浏览器历史记录时,将调用loadState方法。该方法从State参数对象中读取 selectedIndex属性值并更改列表框的selectedIndex属性。

从本例也可以看出,使用HistoryManager和BrowserManager进行深层链接时,浏览器URL片段是不同的。前者会自动添加app参数,app参数值及其它参数名的前缀(状态ID)都是16进制压缩的字符串。注意HistoryManager是用&来分隔URL片段中的名称=值对。

发表评论