`
iMzw
  • 浏览: 194363 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex之DeepLink

    博客分类:
  • Flex
阅读更多
   RIA开发中有一个很重要的问题,那就是对搜索引擎不友善,因为对搜索引擎来说,Rich Internet Application通常是一页HTML。
   换个角度说,在传统的基于页面流的方式我们可以通过http://imzw.iteye.com/blogs/165173导航到一个页面。但RIA的方式通常不行,也就是我们通常无法通过一个链接导航到程序的一个操作界面。Ajax,Flash等RIA技术都面临着这个问题。Ajax可通过JavaScript调用浏览器相关的对象实现。Flash相对要困难些。Flex中已经内建了DeepLink来解决这个问题。
DeepLink是通过锚点,即http://imzw.iteye.com/blogs/165173#view=0;showDetails=true这样一个链接导航到Flex应用程序某一操作界面。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	historyManagementEnabled="false"
	layout="absolute"
	backgroundImage="{bgSource}"
	backgroundColor="#97A5E3"
	initialize="init()"
	>
	<mx:Script>
		<![CDATA[
			import mx.events.BrowserChangeEvent;
			import mx.managers.IBrowserManager;
			import mx.managers.BrowserManager;
			import mx.utils.URLUtil;
			import mx.controls.Alert;
			import mx.collections.ArrayCollection;
			import mx.rpc.events.ResultEvent;
			
			[Bindable]
			[@Embed(source="assets/dog.jpg")]
			public var dog:Class;
			
			[Bindable]
			public var bgSource:String;
			
			public var browserManager:IBrowserManager;
			
			private function init():void{
				initApp();
				bgHttpService.send();
			}
			private function initApp():void
		    {
		        browserManager = BrowserManager.getInstance();
				browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, parseURL);
				browserManager.init("", "Dog");
		    }
		    private var parsing:Boolean = false;
		    private function parseURL(event:Event):void{
		        parsing = true;
		
		        var o:Object = URLUtil.stringToObject(browserManager.fragment);
		        if (o.view == undefined){
		            o.view = 0;
		        }
		        tn.selectedIndex = o.view;
		        browserManager.setTitle((tn.selectedIndex == 0) ? "AnotherDog" : "Dog");
		        tn.validateNow();
		
		        var details:Boolean = o.details == true;
		        if (tn.selectedIndex == 0){
		            shipDetails.selected = details;
		        }else{
		            recvDetails.selected = details;	
		        }
		        parsing = false;		
		    }
		
		    private function updateURL():void{
		        if (!parsing)
		            callLater(actuallyUpdateURL);
		    }
		
		    private function actuallyUpdateURL():void{
		        var o:Object = {};
		        var t:String = "";
		
		        if (tn.selectedIndex == 1){
		            t = "AnotherDog";
		            o.view = tn.selectedIndex;
		            if (recvDetails.selected){
		                o.details = true;
		            }
		        }else{
		            t = "Dog";
		            o.view = tn.selectedIndex;
		            if (shipDetails.selected){
		                o.details = true;
		            }
				}
		        var s:String = URLUtil.objectToString(o);
		        browserManager.setFragment(s);
		        browserManager.setTitle(t);
		    }
		    
			private function bgHandler(event:ResultEvent):void{
				var bgData:ArrayCollection = event.result.backgrounds.image;
//				mx.controls.Alert.show("result");
				var minBg:int = 0;
				var maxBg:int = bgData.length - 1;
				var range:int =maxBg - minBg;
				var bgIndex:int = Math.round(Math.random() * range) + minBg;
				bgSource ="assets/"+ bgData.getItemAt(bgIndex).path;
			}
		]]>
	</mx:Script>
	<mx:HTTPService id="bgHttpService" 
		url="assets/backgrounds.xml" showBusyCursor="true"  method="get"
		fault="{Alert.show(event+'')}"		
		result="{bgHandler(event)}" />
	
	
	<mx:VBox width="100%" height="100%" 
		horizontalAlign="right" 
		verticalAlign="middle">
		
                <!-- 当Tab Change更新URL-->
		<mx:TabNavigator id="tn" change="updateURL()">
		
			<mx:Panel label="Dog">
				<mx:Image id="img" width="400" height="300"
					source="{dog}" 
					scaleContent="true"  />
                               <!-- 当CheckBox Change更新URL-->
				<mx:CheckBox id="shipDetails" label="Show Details" change="updateURL()" />
			</mx:Panel>
			
			<mx:Panel label="Another Dog">
				<mx:Image id="img1" width="400" height="300"
					source="{dog}" 
					scaleContent="true"  />
				<mx:CheckBox id="recvDetails" label="Show Details" change="updateURL()" />
			</mx:Panel>
			
		</mx:TabNavigator>
		
	</mx:VBox>
	
</mx:Application>




关键点:
   1. 在Application中设置 historyManagementEnabled="false" ,因为Flex有些组件(eg:Tab)默认提供了DeepLink功能。
   2. 调用BrowserManager.init() 在Application初始化的时候. 参数 "" 意思是 '#'后面什么都没有.
   3. 在需要的地方更新地址栏URL。
   4. 在Application初始化的时候调用 BrowserManager.addEventListener()监听浏览器的变化。
   5. parseURL()解析URL导航到相应界面(更新的相应状态)。

你可以看这里http://www.mizhongwang.cn/flex-app/RandomBackgroundAndDeepLink/RandomBackgroundAndDeepLink.html

PS:源码中还包含了动态显示不同的背景的代码。每次进入是背景是随机显示的,多刷新几次就能看出来,图片太少了。

--EOF--

0
0
分享到:
评论

相关推荐

    flex3 deep link

    标题“flex3 deep link”指的是Flex 3框架中的深度链接(Deep Linking)技术,这是一种允许用户通过浏览器的地址栏直接访问应用程序特定状态或视图的功能。在Web开发中,深度链接增强了用户体验,因为它使用户能够...

    Flex Flex Flex Flex

    Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex ...

    Flex万年历记事本_flex源码

    Flex是Adobe公司推出的一种基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。这种技术允许开发者创建具有高度交互性和动态视觉效果的Web应用,提供比传统...

    flex学习笔记 flex学习总结 flex学习教程

    Flex是Adobe公司推出的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和Flex框架,可以创建交互性强、用户体验优秀的...通过阅读这些材料,你将能够逐步掌握Flex开发技术,踏上Flex开发之旅。

    Bose博士SoundLink Flex 蓝牙扬声器说明书.pdf

    【Bose博士SoundLink Flex 蓝牙扬声器说明书】是Bose品牌提供的一份详细的操作指南,旨在帮助用户了解并充分利用这款高质量的蓝牙扬声器。该说明书包含了产品特性、设置步骤以及使用技巧等内容,确保用户能够轻松...

    Flex资料大全(Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等)

    本资料大全包含了多个重要的Flex学习资源,如Flex白皮书、Flex Cookbook以及Flex编程指南,这些都是深入理解Flex开发不可或缺的文献。 1. **Flex白皮书**: Flex白皮书是Adobe官方发布的技术文档,通常包含Flex...

    Flex相册 Flex图片

    Flex相册 Flex图片

    FLEX网站源码 FLEX网站源码 FLEX网站源码

    Flex是Adobe公司开发的一种富互联网应用(Rich Internet Application,RIA)框架,主要用于构建运行在浏览器上的交互式应用程序。Flex以其强大的MXML和ActionScript编程语言,以及基于Flash Player或Adobe AIR运行时...

    记事万年历flex源码

    【标题】"记事万年历flex源码"所涉及的知识点主要集中在Adobe Flex技术和日历应用程序开发上。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用(RIA)。它允许开发者使用MXML和ActionScript来创建...

    flex flex和 java交互

    Flex是Adobe公司开发的一种开放源代码的富互联网应用程序(RIA)框架,主要用于构建具有动态图形、交互性丰富的Web应用。Flex应用程序通常使用ActionScript编程语言,并基于Flash Player或Adobe AIR运行时环境。Java...

    flex实战项目,flex开发

    Flex是Adobe公司推出的一种用于构建富互联网应用(RIA, Rich Internet Applications)的开源框架,它主要基于ActionScript编程语言和MXML标记语言。这个“Flex实战项目”可能是一个使用Flex技术构建的实际应用示例,...

    flex_api (FLEX接口)

    Flex API 是一种软件开发接口,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA),它由Adobe公司开发,用于提供强大的图形和交互性功能。在本文中,我们将深入探讨Flex API的核心概念、主要...

    flex 官方文档 中文教程

    Flex是由Adobe公司开发的一种开放源码的富互联网应用程序(RIA)框架,主要用于构建和部署跨平台、跨浏览器的互动用户界面。本教程基于Flex官方文档,旨在为开发者提供中文版的详细学习指南,帮助理解并掌握Flex的...

    Flex技术入门之如何创建flex的web工程

    【Flex技术入门:创建Web工程详解】 Flex技术是Adobe公司为了解决Flash开发难题而推出的一种专门面向程序开发人员的...在开始Flex开发之旅之前,了解其优缺点和创建Web工程的基本流程,将有助于你更好地掌握这项技术。

    Flex3与Flex4对比

    本文旨在详细介绍Flex3与Flex4之间的主要区别,特别是Flex4相较于Flex3的新功能与改进之处。通过对比分析,帮助开发者更好地理解两者之间的差异,从而根据项目需求选择最适合的技术栈。 #### 二、功能区别 ##### 1...

    flex-2.6.0.tar.gz

    Flex是开源的、高度可移植的词法分析器生成器,专门用于...它的灵活性和高效性使其成为开发者的首选工具之一。通过深入学习和使用Flex,你可以更好地理解和控制输入数据的处理过程,为你的项目增添强大的文本解析能力。

    flex中文教程伴有flexbuilder

    6. **事件处理**:在Flex中,事件驱动编程是核心机制之一。教程会介绍如何监听和处理各种用户交互事件,以实现应用程序的响应式设计。 7. **动画与效果**:Flex允许创建丰富的视觉效果和动画,提升用户体验。教程会...

    FLEX安装和配置全步骤

    在IT行业中,FLEX(Flexible Learning Environment eXtension)是一种基于Adobe Flash技术的开发框架,主要用于构建富互联网应用程序(RIA)。本篇文章将详细介绍FLEX的安装与配置过程,帮助初学者快速上手。 首先...

Global site tag (gtag.js) - Google Analytics