11.7.用HistoryManagement整合States视图

11.7.1. 问题
我想用Flex 框架的HistoryManagement 机制整合states。
11.7.2. 解决办法
创建扩展自IHistoryManagerClient 接口的应用程序或组件。使用HistoryManagement 注册应用程序,当state 改变时使用HistoryManager.save 方法保存当前state。
11.7.3. 讨论
IHistoryManager client 定义了以下方法:
loadState(state:Object):void
加载此对象的状态
saveState():Object
保存此对象的状态
toString():String
将此对象转换为唯一的字符串

这些方法允许组件能正确的保存State 的任何信息,在需要时进行还原。loadState 方法从存储的URL 载入State 信息:
+展开
-ActionScript
public function saveState():Object {
trace(" save state ");
var state:Object = {};
state.lastSearch = lastSearch;
state.currentState = currentState;
return state;
}

loadState 方法接受和读取从HistoryManager 中传过来的object 中的State,并设置组件的currentState:
+展开
-ActionScript
public function loadState(state:Object):void {
if (state) {
trace(" last search "+state.lastSearch);
lastSearch = searchInput.text = state.lastSearch;
currentState = state.currentState;
}
}

完整代码如下:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
implements="mx.managers.IHistoryManagerClient"
creationComplete=" HistoryManager.register(this)"
currentState="search">

<mx:Script>
<![CDATA[
import mx.managers.HistoryManager;
public function loadState(state:Object):void {
if (state!=null) {
trace(" last search "+state.lastSearch);
lastSearch = searchInput.text = state.lastSearch;
currentState = state.currentState;
}
}
// Save the current state and the searchString value.
public function saveState():Object {
trace(" save state ");
var state:Object = {};
state.lastSearch = lastSearch;
state.currentState = currentState;
return state;
}
// The search string value.
[Bindable]
public var lastSearch:String;
public function search():void {
lastSearch = searchInput.text;
currentState = "display";
HistoryManager.save();
}
public function reset():void {
trace(" reset ");
currentState = 'search';
searchInput.text = "";
lastSearch = "";
HistoryManager.save();
}
]]>
</mx:Script>
<mx:states>
<mx:State name="display">
<mx:SetProperty target="{panel}name="title"
value="Results"/>

<mx:AddChild relativeTo="{panel}">
<mx:VBox id="results">
<mx:Text text="Getting Results"/>
<mx:Button label="Resetclick="reset()"/>
</mx:VBox>
</mx:AddChild>
</mx:State>
<mx:State name="search">
<mx:SetProperty target="{panel}name="title"
value="Search"/>

<mx:AddChild relativeTo="{panel}">
<mx:HBox id="searchFieldsdefaultButton="{btn}">
<mx:TextInput id="searchInput" />
<mx:Button id="btnlabel="Find"
click="search();" />

</mx:HBox>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Panel id="paneltitle="ResultsresizeEffect="Resize">
</mx:Panel>
</mx:Application>

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


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