20.7.经由BrowserManager深度-链接到数据

20.7.1 问题
我需要从浏览器的URL 传递数据给Flex 控件,并且根据Flex 应用程序里的数据更新浏览器URL 的值,同时执行浏览器的前进或后退导航按钮。
20.7.2 解决办法
使用BrowserManager 类和BrowserChangeEvents 读取并写入数据到浏览器URL。
20.7.3 讨论
无论是通过地址栏的输入框还是还是通过使用导航控件(前进和后退按钮)来改变浏览器URL 的值,BrowserManager 实例都会广播一个BrowserChangeEvent.BROWSER_URL_CHANGE 事件。无论何时,只要该类型的事件发生,你都可以简单地调用updateValues 方法更新Flex 控件的属性值。这让你可以轻易地链接、循环到你的输入值。

下面的例子展示如何从浏览器URL 里读取数据并将读取的值放入Flex mx:TextInput 的属性域里面去。当示例程序加载的时候,它会从当前URL 里读取数据并且将firstName 和lastName参数值写入文本框中去。无论是firstName 还是lastName 值的mx:TextInput 属性域改变的时候,应用程序将在浏览器管理器调用setFragment 方法,使用新的firstName 和lastName 参数值更新浏览器的URL。这让你能够复制粘贴URL,从而轻易地直接连接到当前视图中去,同时也将每一个变化添加到浏览器历史记录中。
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="absolutecreationComplete="onCreationComplete()" >
<mx:Script>
<![CDATA[
import mx.events.BrowserChangeEvent;
import mx.managers.IBrowserManager;
import mx.managers.BrowserManager;
import mx.utils.URLUtil;
private var bm:IBrowserManager
private function onCreationComplete():void
{
//get an instance of the browser manager
bm = BrowserManager.getInstance();
//initialize the browser manager
bm.init();
//set initial values based on url parameters
updateValues();
//add event listeners to handle back/forward browser buttons
bm.addEventListener( BrowserChangeEvent.BROWSER_URL_CHANGE,
onURLChange );
}
private function updateValues():void
{
//update text box values based on url fragment
var o:Object = URLUtil.stringToObject(bm.fragment);
firstName.text = o.firstName;
lastName.text = o.lastName;
}
private function updateURL():void
{
//update URL fragment
bm.setFragment( "firstName=" + firstName.text + ";lastName=" + lastName.text );
}
private function onURLChange( event :
BrowserChangeEvent ):void
{
//call update values based on change url
updateValues();
}

]]>
</mx:Script>
<mx:TextInput x="10y="10id="firstNamechange="updateURL()" />
<mx:TextInput x="10y="40id="lastNamechange="updateURL()"/>
</mx:Application>

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


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