kaiyun官方注册
您所在的位置: 首页> 通信与网络> 设计应用> 谈页面跳转的路由技术
谈页面跳转的路由技术
ZDNET网络频道
摘要:  这应该不算是一个很新的技术,但绝对是一个很有用的技术,这是我在前一个公司工作时学到的,当时实现的是对php页面通过路由实现动态跳转。没想到现在这个项目又将用到。当我们的网站页面很多,需要的跳转很多,而我们又需要动态地在主页面中加载子页面时,就将用到这个技术。
关键词: 路由交换 路由技术
Abstract:
Key words :

  这应该不算是一个很新的技术,但绝对是一个很有用的技术,这是我在前一个公司工作时学到的,当时实现的是对php页面通过路由实现动态跳转。没想到现在这个项目又将用到。当我们的网站页面很多,需要的跳转很多,而我们又需要动态地在主页面中加载子页面时,就将用到这个技术。我们现在这个项目前台由FLEX实现,整个系统可能只由几个application组成,所有的功能点都由module实现,而module本身无法实现各module间的跳转,只能通过application实现对各个module的动态加载来达到跳转的功能。而一个项目中可能有上千个module,公司的每个人可能会分到上百个module乃至几百个module的任务。所有的这些module如果不用路由技术,那么每次跳转都要能过触发一个不同的函数来实现,这样每一个application就会有几百个这样的跳转函数,想想那有多么恐怖吧,而且可维护性将变得极其差。
  如果我们使用了路由技术,那情况就会变得大不一样了,路由技术的原理其实很简单,就是通过字符串的拼接,拼接出一个我们需要跳转的url,通过传递不同的参数,我们便可达到跳转到不同页面的目的。而在我们现在这个项目中,为了达到动态地在application加载module的目的,我把实现跳转的函数从
application移到了module,由各个module自己决定自己要跳转的目的地址,各个module把组装完整的url传递给application,这样在application中只要有一个函数便可实现页面跳转的功能。从几百个函数到一个函数,我们的application将减少几千行代码。最有利的还不是这个,由于把页面跳转的任务权利分到了各个module,这样各个模块内的module将变得更加的独立,每个人只需把自己的module做好便可以了,不用去考虑整个系统。而且系统的集成将变得极其简单,维护也将变得更为独立,更不会出现改动了一个module而牵一发而动全身的情况。
  由此,在我们的application中,如在mainFrame.mxml中,只需定义一个实现跳转的函数
  如:
  public function jumpTo(toUrl:String):void
  {
  m1.url=toUrl;
  m1.loadModule();
  }
  在各个module中,必须要把url完全组装好,包括需要传递类似ID的参数的情况,然后调用application中的jumpTo()函数便可。
  如,在我的一个module中点击修改按钮,在这个module中,加一个函数
  public function displayUpdate():void
  {
  var fromTable:String=this.DG.selectedItem.fromTable as String;
  if(fromTable=="large")
  {
  var url:String = "eqm/updateLarge.swf?eqmID="+ this.DG.selectedItem.eqmID as
String;
  }
  else if(fromTable=="small")
  {
  var url:String="eqm/updateSmall.swf?eqmID="+this.DG.selectedItem.eqmID as
String;
  }
  this.parentApplication.jumpTo(url);
  }
  这样就把实现跳转的任务分配到了各个module,由各个module自已决定跳转!
  但这样之后还可能会报一个
  FLEX:TypeError: Error #1034: 强制转换类型失败 的错误
  这时,在application中加上:
  import mx.managers.DragManager;
  import mx.managers.IPopUpManager;
  private var dragManager : DragManager;
  private var popUpManager : IPopUpManager;
  问题便会得到解决,具体原因如下:(原因转自一台湾网站,我改成了简体中文)
  属于ModuleLoader shared code problem.
  当Module中使用managers时(如PopUpManager,DragManager,
HistoryManager等)则可能出现这个问题(当application里在loader之前没有引入这些manager的引用时)。
  manager的方法是静态方法,整个应用程序中创建了一个该manager接口的singleton实例,但module仅在自己的 Application domain中使用该单例, 当多个module使用同一个单例,manager且main
application没有使用时,就会出现这个空对象应用问题:第一个引入某manager的module不能将该manager接口的singleton跟其他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个module就无法引用到该manager接口的实例,就出现了空对象引用问题.

此内容为AET网站原创,未经授权禁止转载。
Baidu
map