20.9.实现自定义历史记录管理器

20.9.1 问题
我想把自定义组件上的动作或变化注册到浏览器的历史记录中,并让它们可以对浏览器的前进后退按钮进行导航。
20.9.2 解决办法
在Flex 中通过实现mx.managers.IHistoryManagerClient 接口来实现自定义的历史记录管理器。
20.9.3 讨论
为了实现此解决办法,历史记录管理器必须对你的Flex 项目/工程是激活的。为了验证,我们进入Flex Project Properties 对话框,选择Flex Compiler 项,并验证Enable Integration with Browser 复选框处于选中状态,这即表示你的历史记录管理器对你的Flex 项目/工程是激活的。

下面的代码展示了如何为一个自定义的文本框实现IHistoryManagerClient 接口。此控件的任何一个变化,都将注册到浏览器历史记录中。用户可以通过使用浏览器的前进后退按钮在这个TextInput 控件的所有输入之间来回切换。
+展开
-XML
<mx:TextInput
xmlns:mx="http://www.adobe.com/2006/mxml"
text="Change Me!"
implements="mx.managers.IHistoryManagerClient"
creationComplete="mx.managers.HistoryManager.register(this);"
change="textChanged(event)">

<mx:Script>
<![CDATA[
import mx.managers.HistoryManager;
public function saveState():Object
{
return {text:text};
}
public function loadState(state:Object):void
{
var newState:String = state ? state.text : "";
if (newState != text)
{
text = unescape( newState );
}
}
private function textChanged(e:Event):void
{
HistoryManager.save();
}

]]>
</mx:Script>
</mx:TextInput>

创建了此组件之后,你必须将该类的实例注册到历史记录管理器中。这步操作在creationComplete 事件的处理方法中可以看到。
creationComplete="mx.managers.HistoryManager.register(this);"
实现IHistoryManagerClient 接口的组件需要实现saveState 和loadState 方法。

每当自定义TextInput 的值改变的时候,textChanged 方法即被调用,该方法即会调用历史记录管理器的保存记录的方法。当历史记录管理器保存完状态时,saveState 方法即被调用。

saveState 方法需要返回一个将会持久保存在浏览器历史记录中的对象。在这里,该方法返回一个含有text 属性的对象,该text 属性即为设置到TextInput 组件的文本域的值。

当浏览器历史记录经由前进后退按钮改变的时候,loadState 方法即被调用。loadState 方法读取传进来的State 对象的text 属性值,然后根据这个State 对象传入的值来设置TextInput 控件的text 属性域值。

你可以使用类似下面例子中的代码将该组件添加到你的Flex 应用程序中去:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="absolutexmlns:local="*">
<local:MyTextInput />
</mx:Application>

加支付宝好友偷能量挖...


评论(0)网络
阅读(88)喜欢(0)flash/flex/fcs/AIR