路由技术解决页面跳转问题

出处:fang007 发布于:2011-08-30 16:39:23

  引言

  页面跳转路由技术,算来并不是一个很新的技术,但却是一项有用的技术。在网站有很多需要跳转的页面,而我们又需要动态地在主页面中加载子页面时,就会用到这门技术。以我们公司现在这个项目为例,前台是由FLEX实现,整个系统可能只有几个application组成,所有的功能点均由module实现,而module本身无法实现各module之间的跳转,只能通过application实现对各个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等)可能出现这个问题。

  manager的方法是静态方法,整个应用程序中创建了一个该manager接口的singleton实例,但module仅在自己的 Application domain中使用该单例。当多个module使用同一个单例,manager且main application没有使用时,就会出现这个空对象应用问题:个引入某manager的module不能将该manager接口的singleton跟其他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个module就无法引用到该manager接口的实例,就出现了空对象引用问题。



  

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!