然后我们来建立命令,分别由按照列车车次检索和目的地检索的按钮事件来调用,然后在前端控制器中配置:

编写命令

GetStationDetailCommand.as

  1. package com.example.command
  2. {
  3. import com.adobe.cairngorm.commands.ICommand;
  4. import com.adobe.cairngorm.control.CairngormEvent;
  5. import com.example.business.TrainDelegateWS;
  6. import com.example.business.TrainDelegateDB;
  7. import com.example.event.SearchByStationEvent;
  8. import com.example.model.TrainModelLocator;
  9. import mx.collections.ArrayCollection;
  10. import mx.controls.Alert;
  11. import mx.rpc.IResponder;
  12. import mx.rpc.events.FaultEvent;
  13. public class GetStationDetailCommand implements ICommand, IResponder
  14. {
  15. private var modelLocator:TrainModelLocator = TrainModelLocator.getInstance();
  16. private var deaultNS:Namespace = new Namespace("http://WebXml.com.cn/");
  17. private var diffNS:Namespace = new Namespace("diffgr","urn:schemas-microsoft-com:xml-diffgram-v1");
  18. public function execute( event : CairngormEvent ): void {
  19. var searchEvent:SearchByStationEvent = SearchByStationEvent(event);
  20. modelLocator.startStation = searchEvent.start;
  21. modelLocator.arriveStation = searchEvent.end;
  22. switch(modelLocator.currentService) {
  23. case "webService":
  24. var delegate : TrainDelegateWS = new TrainDelegateWS(this);
  25. delegate.getStationDetail();
  26. break;
  27. case "dataBase":
  28. var delegateDB : TrainDelegateDB = new TrainDelegateDB(this);
  29. delegateDB.getStationDetail();
  30. break;
  31. }
  32. }
  33. public function result( event : Object ) : void {
  34. default xml namespace = deaultNS;
  35. var resultXML:XML = new XML(event.result.toString());
  36. var resultList:XMLList = resultXML.getStationAndTimeByStationNameResult.diffNS::diffgram.getStationAndTime.TimeTable;
  37. var model : TrainModelLocator = TrainModelLocator.getInstance();
  38. model.currentStaionList.trainStationList = new ArrayCollection();
  39. var count:uint = 1;
  40. for each(var item:XML in resultList) {
  41. var nodeItem:Object = new Object();
  42. nodeItem.num = count;
  43. count++;
  44. nodeItem.TrainCode = item.TrainCode;
  45. nodeItem.FirstStation = item.FirstStation;
  46. nodeItem.LastStation = item.LastStation;
  47. nodeItem.StartStation = item.StartStation;
  48. nodeItem.StartTime = item.StartTime;
  49. nodeItem.ArriveStation = item.ArriveStation;
  50. nodeItem.ArriveTime = item.ArriveTime;
  51. nodeItem.KM = item.KM;
  52. nodeItem.UseDate = item.UseDate;
  53. model.currentStaionList.trainStationList.addItem(nodeItem);
  54. }
  55. model.currentState = "resultByStationList";
  56. }
  57. public function fault( event : Object ) : void {
  58. var faultEvent : FaultEvent = FaultEvent( event );
  59. Alert.show("Train could not be retrieved!");
  60. }
  61. }
  62. }

GetTrainDetailCommand.as

  1. package com.example.command
  2. {
  3. import com.adobe.cairngorm.commands.ICommand;
  4. import com.adobe.cairngorm.control.CairngormEvent;
  5. import com.example.business.TrainDelegateWS;
  6. import com.example.business.TrainDelegateDB;
  7. import com.example.event.SearchByTrainNameEvent;
  8. import com.example.model.TrainModelLocator;
  9. import mx.collections.ArrayCollection;
  10. import mx.controls.Alert;
  11. import mx.rpc.IResponder;
  12. import mx.rpc.events.FaultEvent;
  13. public class GetTrainDetailCommand implements ICommand, IResponder
  14. {
  15. private var modelLocator:TrainModelLocator = TrainModelLocator.getInstance();
  16. private var deaultNS:Namespace = new Namespace("http://WebXml.com.cn/");
  17. private var diffNS:Namespace = new Namespace("diffgr","urn:schemas-microsoft-com:xml-diffgram-v1");
  18. public function execute( event : CairngormEvent ): void {
  19. var searchEvent:SearchByTrainNameEvent = SearchByTrainNameEvent(event);
  20. modelLocator.currentTrain.name = searchEvent.trainName;
  21. switch(modelLocator.currentService) {
  22. case "webService":
  23. var delegate : TrainDelegateWS = new TrainDelegateWS(this);
  24. delegate.getTrainDetail();
  25. break;
  26. case "dataBase":
  27. var delegateDB : TrainDelegateDB = new TrainDelegateDB(this);
  28. delegateDB.getTrainDetail();
  29. break;
  30. }
  31. }
  32. public function result( event : Object ) : void {
  33. default xml namespace = deaultNS;
  34. var resultXML:XML = new XML(event.result.toString());
  35. var resultList:XMLList = resultXML.getDetailInfoByTrainCodeResult.diffNS::diffgram.getDetailInfo.TrainDetailInfo;
  36. var model : TrainModelLocator = TrainModelLocator.getInstance();
  37. model.currentTrain.journey = new ArrayCollection();
  38. var count:uint = 1;
  39. for each(var item:XML in resultList) {
  40. var nodeItem:Object = new Object();
  41. nodeItem.num = count;
  42. count++;
  43. nodeItem.TrainStation = item.TrainStation;
  44. nodeItem.ArriveTime = item.ArriveTime;
  45. nodeItem.StartTime = item.StartTime;
  46. nodeItem.KM = item.KM;
  47. model.currentTrain.journey.addItem(nodeItem);
  48. }
  49. model.currentState = "resultByTrainName";
  50. }
  51. public function fault( event : Object ) : void {
  52. var faultEvent : FaultEvent = FaultEvent( event );
  53. Alert.show("Train could not be retrieved!");
  54. }
  55. }
  56. }

前端控制器

然后让我们来完成前端控制器,这里比较简单,就是映射两个事件到相应的命令上:

TrainController.as

  1. package com.example.control
  2. {
  3. import com.adobe.cairngorm.control.FrontController;
  4. import com.example.command.*;
  5. import com.example.event.SearchByTrainNameEvent;
  6. import com.example.event.SearchByStationEvent;
  7. public class TrainController extends FrontController
  8. {
  9. public function TrainController() {
  10. initialiseCommands();
  11. }
  12. public function initialiseCommands() : void {
  13. addCommand( SearchByTrainNameEvent.SEARCH_BY_TRAIN_NAME, GetTrainDetailCommand);
  14. addCommand( SearchByStationEvent.SEARCH_BY_STATION, GetStationDetailCommand);
  15. }
  16. }
  17. }

自定义事件

我们需要自定义事件的播放来触发命令的操作,这里我们建立两个自定义事件,分别对应两种搜索状态:

SearchByStationEvent.as

  1. package com.example.event
  2. {
  3. import flash.events.Event;
  4. import com.adobe.cairngorm.control.CairngormEvent;
  5. public class SearchByStationEvent extends CairngormEvent {
  6. public static var SEARCH_BY_STATION : String = "searchByStation";
  7. public var start : String;
  8. public var end : String;
  9. public function SearchByStationEvent() {
  10. super(SEARCH_BY_STATION);
  11. }
  12. override public function clone() : Event {
  13. return new SearchByStationEvent();
  14. }
  15. }
  16. }

SearchByTrainNameEvent.as

  1. package com.example.event
  2. {
  3. import flash.events.Event;
  4. import com.adobe.cairngorm.control.CairngormEvent;
  5. public class SearchByTrainNameEvent extends CairngormEvent {
  6. public static var SEARCH_BY_TRAIN_NAME : String = "searchByTrainName";
  7. public var trainName : String;
  8. public function SearchByTrainNameEvent() {
  9. super(SEARCH_BY_TRAIN_NAME);
  10. }
  11. override public function clone() : Event {
  12. return new SearchByTrainNameEvent();
  13. }
  14. }
  15. }

下一步实现数据模型:

TrainModelLocator.as

  1. package com.example.model
  2. {
  3. import com.adobe.cairngorm.model.ModelLocator;
  4. import com.example.vo.StationListVO;
  5. import com.example.vo.TrainVO;
  6. [Bindable]
  7. public class TrainModelLocator implements ModelLocator {
  8. private static var modelLocator : TrainModelLocator;
  9. public static function getInstance() : TrainModelLocator {
  10. if ( modelLocator == null ) {
  11. modelLocator = new TrainModelLocator();
  12. }
  13. return modelLocator;
  14. }
  15. public function TrainModelLocator() {
  16. if ( modelLocator != null ) {
  17. throw new Error( "Only one TrainModelLocator instance should be instantiated" );
  18. }
  19. }
  20. //serviceConfig
  21. public var wsWSDL:String = "http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl";
  22. public var currentTrain : TrainVO = new TrainVO();
  23. public var currentStaionList : StationListVO = new StationListVO();
  24. public var currentService:String = "webService";
  25. public var startStation:String = "";
  26. public var arriveStation:String = "";
  27. //当前状态
  28. public var currentState:String = "";
  29. }
  30. }

我们定义两个ValueObject类,用于保存按照两种搜索模式检索的返回结果:

StationListVO.as

  1. package com.example.vo
  2. {
  3. import com.adobe.cairngorm.vo.IValueObject;
  4. import mx.collections.ArrayCollection;
  5. [RemoteClass(alias="com.example.vo.StationListVO")]
  6. public class StationListVO implements IValueObject
  7. {
  8. //始发站
  9. [Bindable]
  10. public var startStation:String;
  11. //目的地
  12. [Bindable]
  13. public var endStation:String;
  14. //列车以及行程
  15. [Bindable]
  16. public var trainStationList:ArrayCollection;
  17. }
  18. }

TrainVO.as

  1. package com.example.vo
  2. {
  3. import com.adobe.cairngorm.vo.IValueObject;
  4. import mx.collections.ArrayCollection;
  5. [RemoteClass(alias="com.example.vo.TrainVO")]
  6. public class TrainVO implements IValueObject
  7. {
  8. //列车车次
  9. [Bindable]
  10. public var name:String;
  11. //列车行程,是一个数组,数组的每一项包含序号,车站,到达时间,发车时间,里程(公里)
  12. [Bindable]
  13. public var journey:ArrayCollection;
  14. }
  15. }

至此完成了编码工作,然后我们打开AIR的配置文件(TrainSchedule-app.xml),修改宽度和高度为(800*600),这样返回结果可以显示的更全面一些。

源码下载地址:

http://doc.riameeting.com/download/TrainSchedule.rar

转载于:https://www.cnblogs.com/zhuwenlubin/archive/2010/11/03/1868493.html

使用Flex+Cairngorm+AIR制作列车时刻表查询工具[连载三]相关推荐

  1. win 8 store app 列车时刻表查询 隐私声明

    列车时刻表查询隐私声明: 1.我们不会收集和使用你的个人信息. 2.用户使用我们的服务,应遵守国家有关法律法规和规章制度. 3.用户在使用过程中遇到任何问题,可以通过评论与评分将建议反馈给我们,我们将 ...

  2. python制作【法律条文查询工具】妈妈再也不担心我法盲了

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 更多教程源码资料电子书: 点击此处跳转文末名片获取 环境准备8 Python 3.8 Pycharm <中华人民共和国刑法> 效果展示 打算做 ...

  3. Python tkinter界面编写,制作【法律条文查询工具】

    前言 每次看新闻,会有一些社会新闻说某某某犯了什么法,第几几条.... 但是对于我一个没专门学过法律的人来说,只能知道个大概,想了解具体点的,每次都要去百度查. 所以我就在想,为什么我不能写一个程序, ...

  4. 研究一下列车时刻表的后台表结构和常用的查询SQL

    刚开始上班,闲着没什么事情,搞到一份2012年1月1号的列车时刻表数据库,是access版本的,稍后我会给出下载链接,研究了一下表结构,觉得这样的表结构还是比较合理的.于是也考虑了一下大家经常使用的时 ...

  5. PYTHON 实现 NBA 赛程查询工具(二)—— 网络爬虫

    前言: 第一篇博客,记录一下最近的一点点小成果. 一切的学习都从兴趣开始.最近忽然想学习一下 pyqt 和 python 的网络爬虫知识,于是就自己找了一个课题做了起来.因为我正好是个 NBA 球迷, ...

  6. 全国铁路查询系统_火车票查询时刻表 全国列车时刻表 火车时刻表查询系统使用说明...

    春运来了,快过年了, 又到一年中最一票难求的时候了,在外辛辛苦苦打拼了一年,为了让大家尽早的和亲朋好友家人团聚,本人今年很英勇的出来帮大家代抢火车票啦! 特地为大家建立了一个捡漏票微信群, 加微信qq ...

  7. Flex及AIR开发资源集合

    这篇文章是我在平时经常用到或者收藏的相关于Flex与AIR开发的资源集合,在这里列出来给各位共享,同时也是便于以后自己使用.(将来会按照列表资源的URL更新而改动,版本更新就不做更改了) 开发工具 F ...

  8. python 制作火车时刻表

    python 制作火车时刻表 火车时刻表是一种方便快捷的查询火车班次信息的工具,那么,如何实现用python实现爬取这些网站的时刻表数据呢? 一.访问 http://www.ip138.com/ 查询 ...

  9. 常用的 Web Service 服务汇总(天气预报,列车时刻表)

    现成的Web Service中有很多很好用的,比如天气预报,IP地址搜索,火车时刻表等等.本文汇总的一些常用Web Service,希望对大家有所帮助. 下面总结了一些常用的Web Service,是 ...

最新文章

  1. Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
  2. Objective-C自动生成文档工具:appledoc
  3. R对数秩检验(log rank test)
  4. 线程的调度有抢占式或者非抢占 (转)
  5. oss可用性_对象存储OSS详解
  6. 初始化资源管理器 winform
  7. 撸VUE弹窗组件 + 可编辑div 组件
  8. C# 反射/映射学习
  9. php phdfs扩展,hadoop HDFS的PHP扩展—PHDFS
  10. ThinkingInJava 学习 之 0000001 一切都是对象
  11. winrm java客户端_java通过winrm4j远程连接win执行命令
  12. Reaseach,Refresh和reRead的区别
  13. 计算机电路板工作原理,电磁炉万能电路板工作原理(图)
  14. win10 小娜搜索没法用(语音能用 搜索框不能用)
  15. Could not initialize proxy - the owning Session was closed ---Hibernate与延迟加载:
  16. GFS 区域风场解析问题
  17. 抓起整个网站离线浏览的软件Teleport Pro
  18. Fluent的融化凝固模型介绍
  19. 解决不同浏览器文字间距不同的问题
  20. h5调用android录音,html5网页录音插件Recorder

热门文章

  1. Apache国内镜像下载
  2. 出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。
  3. 零基础来学淘宝美工难吗?
  4. POJ 2987 Firing
  5. cornerstone出现 Unable to connect to a repository at URL
  6. Fingerprintjs2:一款开源设备指纹采集器
  7. 德汇律师事务所任命Ray Liu为北京办事处主管
  8. 用JAVA语言实现一个日历项目
  9. i5-8250U 宏碁swift3_i5-8250U:第八代 CPU 的跑分你应该很想知道!
  10. pdf 文本和图片解析iText