科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由交换谈页面跳转的路由技术

谈页面跳转的路由技术

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 这应该不算是一个很新的技术,但绝对是一个很有用的技术,这是我在前一个公司工作时学到的,当时实现的是对php页面通过路由实现动态跳转。没想到现在这个项目又将用到。当我们的网站页面很多,需要的跳转很多

来源:chinaitlab 2010年11月27日

关键字: 路由交换 路由技术

  • 评论
  • 分享微博
  • 分享邮件

  这应该不算是一个很新的技术,但绝对是一个很有用的技术,这是我在前一个公司工作时学到的,当时实现的是对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接口的实例,就出现了空对象引用问题.

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章