CN101599029A - 一种flex中利用事件机制在模块间传递数据的方法 - Google Patents

一种flex中利用事件机制在模块间传递数据的方法 Download PDF

Info

Publication number
CN101599029A
CN101599029A CNA2009100171146A CN200910017114A CN101599029A CN 101599029 A CN101599029 A CN 101599029A CN A2009100171146 A CNA2009100171146 A CN A2009100171146A CN 200910017114 A CN200910017114 A CN 200910017114A CN 101599029 A CN101599029 A CN 101599029A
Authority
CN
China
Prior art keywords
data
incident
module
dataevent
event
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2009100171146A
Other languages
English (en)
Inventor
邸双朋
魏健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Langchao Electronic Information Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Langchao Electronic Information Industry Co Ltd filed Critical Langchao Electronic Information Industry Co Ltd
Priority to CNA2009100171146A priority Critical patent/CN101599029A/zh
Publication of CN101599029A publication Critical patent/CN101599029A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种在flex应用程序的各模块之间传递数据的方法,该方法利用flex自身的事件传播机制,把数据封装到自定义事件中,然后将携带数据的事件从源模块传递到目标模块,然后在目标模块中将事件中包含的数据分离出来,供目标模块使用,从而达到在模块间传递数据的目的。该方法操作简单,易于维护,消除了模块间的依赖性。由于其利用的是flex自身的事件传播机制,所以传递数据的效率高,而且不容易出现错误。

Description

一种flex中利用事件机制在模块间传递数据的方法
技术领域
本发明涉及flex开发中的一种在各模块之间传递数据的方法。该方法快速,可靠,可以方便的实现各模块之间的交互,易用性强,维护方便,且大大降低了模块之间的耦合度,使各模块更加独立。
背景技术
目前,在flex中实现模块间传递数据的方法主要是通过两个模块之间方法属性的调用来实现的,例如在模块A中访问模块B的属性或方法,使模块A的数据传递到模块B中。由于flex中的模块并不是随程序的启动而加载,而是在程序运行期间动态加载的,如果模块B尚未加载,这时模块A访问模块B的属性或方法就会抛出异常,只有在模块B已经加载的情况下,模块A才能正常运行,这样模块A就对模块B有了一定的依赖性,从而增加了模块间的耦合度。另外,由一个模块向多个模块传递数据时,需要重复访问外部模块的属性或方法,如果需要传递的数据比较多,就会使代码看起来比较杂乱,不利于后期的维护和修改。
发明内容
本发明的目的是在flex开发中提供一种方便,可靠,易于维护的模块间传递数据的方法。
本发明的目的是按以下方式实现的,该方法利用flex自带的事件传播机制,将数据封装到事件中,以事件为载体把待传递的数据传递出去,同时在目的模块中设置对该事件的监听,当监听到该事件后,在目的模块中调用相应的处理方法将事件中的数据分离出来。
方法包括:
a.在数据所在的源模块中创建自定义事件,将要传递的数据封装到该事件中;
b.以flex主程序作为发送事件的对象,将定义的事件分发出去;
c.在目标模块中设置事件监听器,用于监听携带数据的事件,监听到该事件以后,调用相应的处理方法把数据从事件中读取出来并传递到目标模块的变量中。
本发明的方法主要优点如下:
以主程序作为分发事件和监听事件的对象,简化了事件流的处理过程,消除了对其他模块的依赖性。
在数据的源模块中分发事件,方便对数据进行封装;在数据的目的模块中对事件设置监听,有利于数据的分离和使用。
可以在多个模块中设置对事件的监听,从而将数据传递到多个模块中,实现了数据的广播。
本发明的优异效果是,从该方法的实现中可以看出,该方法结构清晰,使用方便,易于维护,加载模块时消除了对其他模块的依赖性,并且方便的实现了数据的广播是一种在flex模块间传递数据的方便,可靠的方法。
具体实施方式
实施例
假设现有模块A,模块B,模块B需要模块A中的数据,利用事件机制在模块之间传递数据的方法如下:
1)自定义事件类DataEvent,用来保存和传递数据,要传递的数据的类型可以是系统可识别的任何类型,并且支持自定义的数据类型。该事件类继承自flash.events.Event类,并添加一个或多个成员变量,用于保存要传递的数据。
2)在模块A中创建DataEvent的实例,并将需要传递的数据保存到步骤1中定义的变量中,然后以主程序作为分发事件的对象将该DataEvent事件分发出去。
3)在模块B中,设置对步骤2中所创建事件实例的监听。监听到主程序分发的事件后,模块B调用相应的处理方法,将该事件中携带的数据分离出来。这样就实现了数据从模块A到模块B的传递。
当需要把模块A中的数据传递到多个模块中时,可依此方法在多个模块中设置监听和处理事件以及读取数据,该方法通过以下步骤实现:
1)自定义事件类,该事件类继承自flash.events.Event类,并添加一个或多个成员变量,用来保存要传递的数据。
类文件名:DataEvent.as
package
{
import flash.events.Event;//导入事件类
public class DataEvent extends Event
{
//保存要传递的数据,可设置多个这样的成员变量。
public var data:String;
//构造函数,type用于区分事件的标志,bubbles指示事件是否为冒泡事件,cancelable指示是否可以阻止与事件相关联的行为。
public function DataEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
{
super(type,bubbles,cancelable);
}
}
}
该文件定义了一个事件类,用来保存和传递数据,要传递的数据的类型可以是系统可识别的任何类型,并且支持自定义的数据类型。
2)在模块A中创建DataEvent的实例,并将需要传递的数据保存到data变量中,然后以主程序作为分发事件的对象将该DataEvent事件分发出去。
模块A中的内容:
<mx:Module xmlns:mx=″http://www.adobe.com/2006/mxml″layout=″absolute″>
<mx:Script>
<![CDATA[
private function onclick(e:Event):void{
//创建自定义事件的实例,myevent为监听时用来区分事件的标志。
var dataEvent:DataEvent=new DataEvent(″myevent″);
//把要传递的数据保存到data变量中。
dataEvent.data=″mydata″;
//把携带数据的事件分发出去。
this.parentApplication.dispatchEvent(dataEvent);
}
]]>
</mx:Script>
<mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″>
<mx:Button x=″149″y=″107″label=″Button″click=″onclick(event)″/>
</mx:Canvas>
</mx:Module>
该模块中,当点击button按钮时,就会触发click事件,然后调用onclick方法,将事件分发出去。this.parentApplication表示该flex程序的主程序,该模块中由主程序作为分发事件的对象。
3)在模块B中,设置对事件myevent的监听。监听到myevent后,调用相应的处理方法,将myevent中携带的数据分离出来。
模块B中的内容:
<mx:Module xmlns:mx=http://www.adobe.com/2006/mxml
layout=″absolute″width=″400″height=″300″
creationComplete=″oncreate()″>
<mx:Script>
<![CDATA[
private function oncreate():void{
//设置对myevent事件的监听,监听到以后调用onevent方法进行处理。
  this.parentApplication.addEventListener(″myevent″,onevent);
}
private function onevent(e:DataEvent):void{
//处理myevent事件,将myevent事件中携带的数据读取出来。
textArea.text=e.data;
}
]]>
</mx:Script>
<mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″>
<mx:TextArea id=″textArea″x=″101″y=″107″/>
</mx:Canvas>
</mx:Module>
该模块中,当模块B创建完成时调用oncreate方法,设置对myevent事件的监听,由this.parentApplication即主程序来监听myevent事件,当主程序监听到myevent事件后调用onevent方法处理该事件,将事件中携带的数据读取出来。这样就实现了数据从模块A到模块B的传递。
当需要把模块A中的数据传递到多个模块中时,可按照模块B中设置监听和处理事件的方式在其他模块中设置监听以及读取数据。

Claims (1)

1、一种flex中利用事件机制在模块间传递数据的方法,其特征在于方法包括:
a.在数据所在的源模块中创建自定义事件,将要传递的数据封装到该事件中;
b.以flex主程序作为发送事件的对象,将定义的事件分发出去;
c.在目标模块中设置事件监听器,用于监听携带数据的事件,监听到该事件以后,调用相应的处理方法把数据从事件中读取出来并传递到目标模块的变量中;
d.将flex主程序作为发送事件和监听事件的对象,在运行过程中,主程序一直存在,不会出现发送事件的对象或监听事件的对象不存在的情况,消除了模块间的依赖性;
e.在数据的源模块和目标模块中分发事件和设置事件监听,就近调用处理方法来封装和分离要传递的数据;
f.在多个不同的模块中对同一个事件进行监听,将数据传递到多个模块中,供多个模块使用,实现了数据的广播;当需要把一个模块中的数据传递到多个模块中并在多个模块中设置监听和处理事件以及读取数据时,通过以下步骤实现:
1)自定义事件类,该事件类继承自flash.events.Event类,并添加一个或多个成员变量,用来保存要传递的数据;
类文件名:DataEvent.as
package
{
import flash.events.Event;//导入事件类
public class DataEvent extends Event
{
//保存要传递的数据,可设置多个这样的成员变量;
public var data:String;
//构造函数,type用于区分事件的标志,bubbles指示事件是否为冒泡事件,cancelable指示是否可以阻止与事件相关联的行为;
public function DataEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
{
super(type,bubbles,cancelable);
}
}
}
该文件定义了一个事件类,用来保存和传递数据,要传递的数据的类型可以是系统可识别的任何类型,并且支持自定义的数据类型;
2)设定在模块A中创建DataEvent的实例,并将需要传递的数据保存到data变量中,然后以主程序作为分发事件的对象将该DataEvent事件分发出去;
模块A中的内容:
<mx:Module xmlns:mx=″http://www.adobe.com/2006/mxml″layout=″absolute″>
<mx:Script>
<![CDATA[
private function onclick(e:Event):void{
//创建自定义事件的实例,myevent为监听时用来区分事件的标志;
var dataEvent:DataEvent=new DataEvent(″myevent″);
//把要传递的数据保存到data变量中;
dataEvent.data=″mydata″;
//把携带数据的事件分发出去;
this.parentApplication.dispatchEvent(dataEvent);
}
]]>
</mx:Script>
<mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″>
<mx:Button x=″149″y=″107″label=″Button″click=″onclick(event)″/>
</mx:Canvas>
</mx:Module>
该模块中,当点击button按钮时,就会触发click事件,然后调用onclick方法,将事件分发出去,this.parentApplication表示该flex程序的主程序,该模块中由主程序作为分发事件的对象;
3)设定在模块B中设置对事件myevent的监听,监听到myevent后,调用相应的处理方法,将myevent中携带的数据分离出来;
模块B中的内容:
<mx:Module xmlns:mx=http://www.adobe.com/2006/mxml
layout=″absolute″width=″400″height=″300″
creationComplete=″oncreate()″>
<mx:Script>
<![CDATA [
private function oncreate():void{
//设置对myevent事件的监听,监听到以后调用onevent方法进行处理;
this.parentApplication.addEventListener(″myevent″,onevent);
}
private function onevent(e:DataEvent):void{
//处理myevent事件,将myevent事件中携带的数据读取出来;
textArea.text=e.data;
}
]]>
</mx:Script>
<mx:Canvas x=″10″y=″10″width=″380″height=″280″borderStyle=″solid″borderThickness=″2″>
<mx:TextArea id=″textArea″x=″101″y=″107″/>
</mx:Canvas>
</mx:Module>。
CNA2009100171146A 2009-07-09 2009-07-09 一种flex中利用事件机制在模块间传递数据的方法 Pending CN101599029A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2009100171146A CN101599029A (zh) 2009-07-09 2009-07-09 一种flex中利用事件机制在模块间传递数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2009100171146A CN101599029A (zh) 2009-07-09 2009-07-09 一种flex中利用事件机制在模块间传递数据的方法

Publications (1)

Publication Number Publication Date
CN101599029A true CN101599029A (zh) 2009-12-09

Family

ID=41420484

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2009100171146A Pending CN101599029A (zh) 2009-07-09 2009-07-09 一种flex中利用事件机制在模块间传递数据的方法

Country Status (1)

Country Link
CN (1) CN101599029A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104267955A (zh) * 2014-09-28 2015-01-07 曙光信息产业股份有限公司 一种程序启停时模块间运行依赖的消除方法
CN104731687A (zh) * 2013-12-24 2015-06-24 镇江金钛软件有限公司 一种电脑活动的实时监控方法
CN105094811A (zh) * 2015-06-29 2015-11-25 安一恒通(北京)科技有限公司 一种事件处理的方法和装置
CN109299171A (zh) * 2018-08-13 2019-02-01 南京工业职业技术学院 一种flex客户端支持海量数据长时计算的方法
CN109327726A (zh) * 2018-09-30 2019-02-12 武汉斗鱼网络科技有限公司 一种弹幕消息的处理方法、装置、终端和存储介质

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104731687A (zh) * 2013-12-24 2015-06-24 镇江金钛软件有限公司 一种电脑活动的实时监控方法
CN104267955A (zh) * 2014-09-28 2015-01-07 曙光信息产业股份有限公司 一种程序启停时模块间运行依赖的消除方法
CN104267955B (zh) * 2014-09-28 2017-11-07 曙光信息产业股份有限公司 一种程序启停时模块间运行依赖的消除方法
CN105094811A (zh) * 2015-06-29 2015-11-25 安一恒通(北京)科技有限公司 一种事件处理的方法和装置
CN105094811B (zh) * 2015-06-29 2019-07-02 安一恒通(北京)科技有限公司 一种事件处理的方法和装置
CN109299171A (zh) * 2018-08-13 2019-02-01 南京工业职业技术学院 一种flex客户端支持海量数据长时计算的方法
CN109299171B (zh) * 2018-08-13 2021-04-20 南京工业职业技术大学 一种flex客户端支持海量数据长时计算的方法
CN109327726A (zh) * 2018-09-30 2019-02-12 武汉斗鱼网络科技有限公司 一种弹幕消息的处理方法、装置、终端和存储介质

Similar Documents

Publication Publication Date Title
CN101599029A (zh) 一种flex中利用事件机制在模块间传递数据的方法
US10031789B2 (en) Generic distributed processing for multi-agent systems
US8843832B2 (en) Architecture, system and method for a real-time collaboration interface
JP6461246B2 (ja) インダストリアル・インターネットオペレーションシステムに基づく安全性の検査方法と装置
CA2605120A1 (en) Method and system for hosting and executing a component application
CN110908658A (zh) 一种“微服务+微应用”系统、数据处理方法及装置
EP1524600A3 (en) A method for providing guaranteed distributed failure notification
CN102467411A (zh) 一种工作流处理及工作流代理方法、装置和系统
CN102819452A (zh) 基于android系统的中间件装置及其方法
CN112783877A (zh) 跨链数据验证方法、装置、设备和存储介质
CN101315609A (zh) 实现单进程中组件间进行通信的装置和方法
CN105487933A (zh) 一种基于核间异步消息队列与共享内存的域间通信方法
CN106598751A (zh) 通过事件总线分发事件的方法及系统
CN102946425A (zh) 基于OSGi的统一通信平台服务集成框架
CN101963924B (zh) 一种进程通信方法、装置及操作系统
US20020069257A1 (en) Provisioning mechanism for a service gateway
CN116700779A (zh) 代码动态调整方法、装置、设备、介质和程序产品
CN106488269A (zh) 基于第三方应用平台实现对电视设备控制的系统及方法
CN108572863B (zh) 分布式任务调度系统及方法
CN104010026B (zh) 一种控制家电的方法、装置和家电控制系统
US20080229324A1 (en) System and method for sharing e-service resource of digital home
CN106341293B (zh) 一种信息系统接入企业服务总线的方法及装置
EP1806656A3 (en) Information distribution apparatus
CN101673218A (zh) 一种获取Linux内核信息的方法和系统
KR20100013538A (ko) 유비쿼터스 모니터링 시스템

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20091209