使用Flex+Cairngorm+AIR制作列车时刻表查询工具[连载三]
然后我们来建立命令,分别由按照列车车次检索和目的地检索的按钮事件来调用,然后在前端控制器中配置:
编写命令
GetStationDetailCommand.as
- package com.example.command
- {
- import com.adobe.cairngorm.commands.ICommand;
- import com.adobe.cairngorm.control.CairngormEvent;
- import com.example.business.TrainDelegateWS;
- import com.example.business.TrainDelegateDB;
- import com.example.event.SearchByStationEvent;
- import com.example.model.TrainModelLocator;
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.rpc.IResponder;
- import mx.rpc.events.FaultEvent;
- public class GetStationDetailCommand implements ICommand, IResponder
- {
- private var modelLocator:TrainModelLocator = TrainModelLocator.getInstance();
- private var deaultNS:Namespace = new Namespace("http://WebXml.com.cn/");
- private var diffNS:Namespace = new Namespace("diffgr","urn:schemas-microsoft-com:xml-diffgram-v1");
- public function execute( event : CairngormEvent ): void {
- var searchEvent:SearchByStationEvent = SearchByStationEvent(event);
- modelLocator.startStation = searchEvent.start;
- modelLocator.arriveStation = searchEvent.end;
- switch(modelLocator.currentService) {
- case "webService":
- var delegate : TrainDelegateWS = new TrainDelegateWS(this);
- delegate.getStationDetail();
- break;
- case "dataBase":
- var delegateDB : TrainDelegateDB = new TrainDelegateDB(this);
- delegateDB.getStationDetail();
- break;
- }
- }
- public function result( event : Object ) : void {
- default xml namespace = deaultNS;
- var resultXML:XML = new XML(event.result.toString());
- var resultList:XMLList = resultXML.getStationAndTimeByStationNameResult.diffNS::diffgram.getStationAndTime.TimeTable;
- var model : TrainModelLocator = TrainModelLocator.getInstance();
- model.currentStaionList.trainStationList = new ArrayCollection();
- var count:uint = 1;
- for each(var item:XML in resultList) {
- var nodeItem:Object = new Object();
- nodeItem.num = count;
- count++;
- nodeItem.TrainCode = item.TrainCode;
- nodeItem.FirstStation = item.FirstStation;
- nodeItem.LastStation = item.LastStation;
- nodeItem.StartStation = item.StartStation;
- nodeItem.StartTime = item.StartTime;
- nodeItem.ArriveStation = item.ArriveStation;
- nodeItem.ArriveTime = item.ArriveTime;
- nodeItem.KM = item.KM;
- nodeItem.UseDate = item.UseDate;
- model.currentStaionList.trainStationList.addItem(nodeItem);
- }
- model.currentState = "resultByStationList";
- }
- public function fault( event : Object ) : void {
- var faultEvent : FaultEvent = FaultEvent( event );
- Alert.show("Train could not be retrieved!");
- }
- }
- }
GetTrainDetailCommand.as
- package com.example.command
- {
- import com.adobe.cairngorm.commands.ICommand;
- import com.adobe.cairngorm.control.CairngormEvent;
- import com.example.business.TrainDelegateWS;
- import com.example.business.TrainDelegateDB;
- import com.example.event.SearchByTrainNameEvent;
- import com.example.model.TrainModelLocator;
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.rpc.IResponder;
- import mx.rpc.events.FaultEvent;
- public class GetTrainDetailCommand implements ICommand, IResponder
- {
- private var modelLocator:TrainModelLocator = TrainModelLocator.getInstance();
- private var deaultNS:Namespace = new Namespace("http://WebXml.com.cn/");
- private var diffNS:Namespace = new Namespace("diffgr","urn:schemas-microsoft-com:xml-diffgram-v1");
- public function execute( event : CairngormEvent ): void {
- var searchEvent:SearchByTrainNameEvent = SearchByTrainNameEvent(event);
- modelLocator.currentTrain.name = searchEvent.trainName;
- switch(modelLocator.currentService) {
- case "webService":
- var delegate : TrainDelegateWS = new TrainDelegateWS(this);
- delegate.getTrainDetail();
- break;
- case "dataBase":
- var delegateDB : TrainDelegateDB = new TrainDelegateDB(this);
- delegateDB.getTrainDetail();
- break;
- }
- }
- public function result( event : Object ) : void {
- default xml namespace = deaultNS;
- var resultXML:XML = new XML(event.result.toString());
- var resultList:XMLList = resultXML.getDetailInfoByTrainCodeResult.diffNS::diffgram.getDetailInfo.TrainDetailInfo;
- var model : TrainModelLocator = TrainModelLocator.getInstance();
- model.currentTrain.journey = new ArrayCollection();
- var count:uint = 1;
- for each(var item:XML in resultList) {
- var nodeItem:Object = new Object();
- nodeItem.num = count;
- count++;
- nodeItem.TrainStation = item.TrainStation;
- nodeItem.ArriveTime = item.ArriveTime;
- nodeItem.StartTime = item.StartTime;
- nodeItem.KM = item.KM;
- model.currentTrain.journey.addItem(nodeItem);
- }
- model.currentState = "resultByTrainName";
- }
- public function fault( event : Object ) : void {
- var faultEvent : FaultEvent = FaultEvent( event );
- Alert.show("Train could not be retrieved!");
- }
- }
- }
前端控制器
然后让我们来完成前端控制器,这里比较简单,就是映射两个事件到相应的命令上:
TrainController.as
- package com.example.control
- {
- import com.adobe.cairngorm.control.FrontController;
- import com.example.command.*;
- import com.example.event.SearchByTrainNameEvent;
- import com.example.event.SearchByStationEvent;
- public class TrainController extends FrontController
- {
- public function TrainController() {
- initialiseCommands();
- }
- public function initialiseCommands() : void {
- addCommand( SearchByTrainNameEvent.SEARCH_BY_TRAIN_NAME, GetTrainDetailCommand);
- addCommand( SearchByStationEvent.SEARCH_BY_STATION, GetStationDetailCommand);
- }
- }
- }
自定义事件
我们需要自定义事件的播放来触发命令的操作,这里我们建立两个自定义事件,分别对应两种搜索状态:
SearchByStationEvent.as
- package com.example.event
- {
- import flash.events.Event;
- import com.adobe.cairngorm.control.CairngormEvent;
- public class SearchByStationEvent extends CairngormEvent {
- public static var SEARCH_BY_STATION : String = "searchByStation";
- public var start : String;
- public var end : String;
- public function SearchByStationEvent() {
- super(SEARCH_BY_STATION);
- }
- override public function clone() : Event {
- return new SearchByStationEvent();
- }
- }
- }
SearchByTrainNameEvent.as
- package com.example.event
- {
- import flash.events.Event;
- import com.adobe.cairngorm.control.CairngormEvent;
- public class SearchByTrainNameEvent extends CairngormEvent {
- public static var SEARCH_BY_TRAIN_NAME : String = "searchByTrainName";
- public var trainName : String;
- public function SearchByTrainNameEvent() {
- super(SEARCH_BY_TRAIN_NAME);
- }
- override public function clone() : Event {
- return new SearchByTrainNameEvent();
- }
- }
- }
下一步实现数据模型:
TrainModelLocator.as
- package com.example.model
- {
- import com.adobe.cairngorm.model.ModelLocator;
- import com.example.vo.StationListVO;
- import com.example.vo.TrainVO;
- [Bindable]
- public class TrainModelLocator implements ModelLocator {
- private static var modelLocator : TrainModelLocator;
- public static function getInstance() : TrainModelLocator {
- if ( modelLocator == null ) {
- modelLocator = new TrainModelLocator();
- }
- return modelLocator;
- }
- public function TrainModelLocator() {
- if ( modelLocator != null ) {
- throw new Error( "Only one TrainModelLocator instance should be instantiated" );
- }
- }
- //serviceConfig
- public var wsWSDL:String = "http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl";
- public var currentTrain : TrainVO = new TrainVO();
- public var currentStaionList : StationListVO = new StationListVO();
- public var currentService:String = "webService";
- public var startStation:String = "";
- public var arriveStation:String = "";
- //当前状态
- public var currentState:String = "";
- }
- }
我们定义两个ValueObject类,用于保存按照两种搜索模式检索的返回结果:
StationListVO.as
- package com.example.vo
- {
- import com.adobe.cairngorm.vo.IValueObject;
- import mx.collections.ArrayCollection;
- [RemoteClass(alias="com.example.vo.StationListVO")]
- public class StationListVO implements IValueObject
- {
- //始发站
- [Bindable]
- public var startStation:String;
- //目的地
- [Bindable]
- public var endStation:String;
- //列车以及行程
- [Bindable]
- public var trainStationList:ArrayCollection;
- }
- }
TrainVO.as
- package com.example.vo
- {
- import com.adobe.cairngorm.vo.IValueObject;
- import mx.collections.ArrayCollection;
- [RemoteClass(alias="com.example.vo.TrainVO")]
- public class TrainVO implements IValueObject
- {
- //列车车次
- [Bindable]
- public var name:String;
- //列车行程,是一个数组,数组的每一项包含序号,车站,到达时间,发车时间,里程(公里)
- [Bindable]
- public var journey:ArrayCollection;
- }
- }
至此完成了编码工作,然后我们打开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制作列车时刻表查询工具[连载三]相关推荐
- win 8 store app 列车时刻表查询 隐私声明
列车时刻表查询隐私声明: 1.我们不会收集和使用你的个人信息. 2.用户使用我们的服务,应遵守国家有关法律法规和规章制度. 3.用户在使用过程中遇到任何问题,可以通过评论与评分将建议反馈给我们,我们将 ...
- python制作【法律条文查询工具】妈妈再也不担心我法盲了
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 更多教程源码资料电子书: 点击此处跳转文末名片获取 环境准备8 Python 3.8 Pycharm <中华人民共和国刑法> 效果展示 打算做 ...
- Python tkinter界面编写,制作【法律条文查询工具】
前言 每次看新闻,会有一些社会新闻说某某某犯了什么法,第几几条.... 但是对于我一个没专门学过法律的人来说,只能知道个大概,想了解具体点的,每次都要去百度查. 所以我就在想,为什么我不能写一个程序, ...
- 研究一下列车时刻表的后台表结构和常用的查询SQL
刚开始上班,闲着没什么事情,搞到一份2012年1月1号的列车时刻表数据库,是access版本的,稍后我会给出下载链接,研究了一下表结构,觉得这样的表结构还是比较合理的.于是也考虑了一下大家经常使用的时 ...
- PYTHON 实现 NBA 赛程查询工具(二)—— 网络爬虫
前言: 第一篇博客,记录一下最近的一点点小成果. 一切的学习都从兴趣开始.最近忽然想学习一下 pyqt 和 python 的网络爬虫知识,于是就自己找了一个课题做了起来.因为我正好是个 NBA 球迷, ...
- 全国铁路查询系统_火车票查询时刻表 全国列车时刻表 火车时刻表查询系统使用说明...
春运来了,快过年了, 又到一年中最一票难求的时候了,在外辛辛苦苦打拼了一年,为了让大家尽早的和亲朋好友家人团聚,本人今年很英勇的出来帮大家代抢火车票啦! 特地为大家建立了一个捡漏票微信群, 加微信qq ...
- Flex及AIR开发资源集合
这篇文章是我在平时经常用到或者收藏的相关于Flex与AIR开发的资源集合,在这里列出来给各位共享,同时也是便于以后自己使用.(将来会按照列表资源的URL更新而改动,版本更新就不做更改了) 开发工具 F ...
- python 制作火车时刻表
python 制作火车时刻表 火车时刻表是一种方便快捷的查询火车班次信息的工具,那么,如何实现用python实现爬取这些网站的时刻表数据呢? 一.访问 http://www.ip138.com/ 查询 ...
- 常用的 Web Service 服务汇总(天气预报,列车时刻表)
现成的Web Service中有很多很好用的,比如天气预报,IP地址搜索,火车时刻表等等.本文汇总的一些常用Web Service,希望对大家有所帮助. 下面总结了一些常用的Web Service,是 ...
最新文章
- Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
- Objective-C自动生成文档工具:appledoc
- R对数秩检验(log rank test)
- 线程的调度有抢占式或者非抢占 (转)
- oss可用性_对象存储OSS详解
- 初始化资源管理器 winform
- 撸VUE弹窗组件 + 可编辑div 组件
- C# 反射/映射学习
- php phdfs扩展,hadoop HDFS的PHP扩展—PHDFS
- ThinkingInJava 学习 之 0000001 一切都是对象
- winrm java客户端_java通过winrm4j远程连接win执行命令
- Reaseach,Refresh和reRead的区别
- 计算机电路板工作原理,电磁炉万能电路板工作原理(图)
- win10 小娜搜索没法用(语音能用 搜索框不能用)
- Could not initialize proxy - the owning Session was closed ---Hibernate与延迟加载:
- GFS 区域风场解析问题
- 抓起整个网站离线浏览的软件Teleport Pro
- Fluent的融化凝固模型介绍
- 解决不同浏览器文字间距不同的问题
- h5调用android录音,html5网页录音插件Recorder
热门文章
- Apache国内镜像下载
- 出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。
- 零基础来学淘宝美工难吗?
- POJ 2987 Firing
- cornerstone出现 Unable to connect to a repository at URL
- Fingerprintjs2:一款开源设备指纹采集器
- 德汇律师事务所任命Ray Liu为北京办事处主管
- 用JAVA语言实现一个日历项目
- i5-8250U 宏碁swift3_i5-8250U:第八代 CPU 的跑分你应该很想知道!
- pdf 文本和图片解析iText