- 浏览: 10461 次
最新评论
SWFAddress实现Flex深度链接(不同模块具有不同的URL)
- 博客分类:
- 技术杂绘
众所周知,Flex明显区别于传统B/S开发模式的特性中,有一条为在Flex中已经再看不到页面的跳转会伴随URL的变化了,但在实际应用中,我们会遇到,我们给朋友介绍自己Flex做的网站的某个亮点时候,没法具体定位到某个模块部分(传统的html/jsp/asp/php等是可以做到的),而且传统页面还可以通过浏览器的向前和向后按钮实现浏览历史回退功能,而我们的Flex默认并没有此功能,这无疑在用户体验上为Flexl/Flash应用添上了不雅的一笔。我们都是凡人,所以我们能够发现的问题,前人也一样可以发现,我们Flex的设计者早已为我们做好这方面的考虑。当然官方给我们的解决方案不一定是最好的,一旦你觉得用的不爽,便可以自己架锅,进行DIY. asual(http://www.asual.com/swfaddress/)为我们提供了比官方更为完美的解决方案(个人观点)。我们今天重点讲asual提供的SWFAddress解决deep link问题。
一:官方解决方案
1.HistoryManager
HistoryManager功能在Flex项目中是默认打开的,比如在使用Accordion 和 TabNavigator组件时,在不同区域切换时,Flex会自动记录下各个状态,对于其他组件如果你要用它则需要:
a.实现mx.managers.IHistoryManagerClient接口。
b.用HistoryManager'的register()方法为组建注册。
c.当组件状态改变时保存组件的状态。
d.通过实施IHistoryManagerClient的saveState() 和 loadState()方法来保存和读取组件状态。
2.BrowserManager
BrowserManager是区别于HistoryManager的另一种实现deep link的方式,二者不能共存(只能用一种)。它的使用方法为:
a.init(fragment,title)
该方法可以定义默认的链接参数和网页标题。一般在初始化时用到。例如:
browserManager.init("", "Test Deep Linking");定义了参数为空,标题为Test Deep Linking的网页。
b.setTitle(title)
该方法用来设置网页标题。例如:
browserManager.setTitle("The New Title") 设置网页标题为"The New Title"。
c.setFragment(fragment)
该方法用来设置网页参数。例如:
browserManager.setFragment("id=3") 设置参数"id=3"。
这两个不多介绍了,请参考:http://xinzy.javaeye.com/blog/474778; http://riaoo.com/?p=8;
二:SWFAddress解决方案
这种方式难度不大,个人感觉它用起来比官方提供的解决方案简洁很多。主要有SWFAddress.as、SWFAddressEvent.as两个文件as文件以及swfaddress.js、swfobject.js两个js文件。具体用法如下:
1.监听SWFAddressEvent.CHANGE事件,调用SWFAddressEvent.setValue(),在SWFAddressEvent.CHANGE事件的监听函数中作视图更换: layout="vertical" creationComplete="initApp()"> Flex URL Test"; private function initApp():void { SWFAddress.addEventListener(SWFAddressEvent.CHANGE , handleSWFAddress); } private function handleSWFAddress(event:SWFAddressEvent):void { var temp:String = event.value; switch(temp){ case "/label1": tileURL = "yi"; break; case "/label2": tileURL = "2"; break; case "/label3": tileURL = "san"; break; } SWFAddress.setTitle(temp.substr(1,temp.length)); } private function butnClick(event:MouseEvent):void { var lstr:String = event.target.label; var temp:String = ""; switch(lstr){ case "label1": temp = "lable1/view1"; break; case "label2": temp = "lable2"; break; case "label3": temp = "lable3?pame=natian"; break; } SWFAddress.setValue(temp); } private function test():void { trace("getBaseURL : "+SWFAddress.getBaseURL()); trace("getPath : "+SWFAddress.getPath()); trace("getPathNames : "+SWFAddress.getPathNames()); trace("getParameterNames : "+SWFAddress.getParameterNames()); } ]]--> 2.在index.template.html中嵌入swfaddress.js、swfobject.js练个js文件。注意这两js文件一定要写在嵌入swf代码的前面,否则加载swf时需要的js文件还未加载,会导致结果得不到相应,我恰恰因为这样困扰了3-4天:
参考文档:http://www.asual.com/swfaddress/
Ok,congratulations,when you come to this step,you can make you Flex applicaton has different URL among the different models,and you aslo can use the back or farword function of the browser.GOOD LUCK!
发表评论
-
java截取带html标签的字符串,再把标签补全(保证页面显示效果)
2012-07-06 09:52 1215java截取带HTML标签的字符串,一般情况下有三种实现方 ... -
linux常用命令
2012-07-06 09:46 749一、 vi使用场景&常用命令 命令 含义 vi ... -
java组件的透明问题
2012-07-03 13:44 524记得有不少人质疑java透明方面的能力,也有很多人到处找怎 ... -
Flex之数据格式化
2012-07-02 13:27 623数据格式化是对某些特殊的数据的格式进行规范。例如,日期格式 ... -
使用FLEX的HttpService与ASP.NET进行动态交互之一(转载)
2012-07-02 13:27 611使用FLEX的HttpService ... -
Flex 动态datagrid的应用
2012-07-02 13:27 595Flex有2种常用的datagrid: ... -
Flex TXT文件导入
2012-07-02 13:27 656在上一篇文章中,我们做了一个文件上传、导入组件,其实就是一 ... -
Get android source
2012-07-01 10:54 600狗日的csdn,改个名字还要积分!! ... -
[tamarin系列之9] 在线的eval
2012-07-01 10:54 597文章分类:Java编程 我们先做一个实验: 1、构建 ... -
JAVA+fms
2012-07-01 10:54 551最近完成的 Java Flex Fms 视频聊天程序,虽然 ... -
flash builder 制作 浏览器并 读写配制文件
2012-07-01 10:54 678flex/spark" xmlns:mx=&q ... -
采用数据库为Flex Tree组件的提供数据-前言
2012-06-30 17:15 608采用数据库为Flex Tree组件的提供数据-前言 2010 ... -
[转载]每天学一点Flex(1):DataGrid组件分页
2012-06-30 17:15 567[转载]每天学一点Flex(1):DataGrid组件分页 ... -
Flex: DataGroup 组件增加滚动条
2012-06-30 17:15 722Flex: DataGroup 组件增加滚动条 2011年0 ... -
TWaver Flex与.net最新版,三大视图组件齐备
2012-06-30 17:15 612TWaver Flex与.net最新版,三大视图组件齐备 2 ...
相关推荐
swfaddress-2.4.zip
swfaddress.js的作用是在不刷新网页的情况下为地址栏更换地址,并可实现访问这个地址时也同时接受到参数。注:除js文件外请详细看.fla文件,在本地测试无法观看到地址栏的结果,请放置到服务器IIS环境。 swffit.js...
源代码 swfaddress-2.4-dist
HTML5历史记录API / SWFAddress集成测试 基于Pintsize- //pintsize.io
SWFObject.js Flash性能增强插件,可用于网站大型flash展示页面。
menufivel 一款AS3写的高级2级菜单。支持SWFADDRESS。非常值得研究
k.framework 是 AS2 中的开源前端 Flash 框架。 k.framework 内置了与 SWFAddress、SWFObject 和 swffit 的深层链接。 k.framework 的站点包括: * 导航 * 过渡 * 预加载
官方演示:... 一款简约大气的Flash网站模板,采用炫酷的LOGO过场动画,隐藏式菜单,相册分大、中、小图,主菜单最多支持6个,支持二级菜单,并支持(SWFAddress)地址栏定位栏目。
此外Gaia还整合了SWFAddress,GreenShock Tween,采用MVC,Singleton等设计模式和业界流行的最佳解决方案(Best Practice)。Gaia还提供了配套的Flash插件面板,能够很直观的帮助用户快速配置网站。 抽象是一件很...
此外Gaia还整合了SWFAddress,GreenShock Tween,采用MVC,Singleton等设计模式和业界流行的最佳解决方案(Best Practice)。Gaia还提供了配套的Flash插件面板,能够很直观的帮助用户快速配置网站。 抽象是一件很...