`
xo_tobacoo
  • 浏览: 391905 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

任意地方监听同一事件

阅读更多

基本原理:使用同一个事件调度类。调度类可以扩展EventDispatcher,或者直接使用EventDispatcher,或者实现IEventDispatcher。

在flex中中新建一个EventDispatcher对象作为共享对象,用它抛出事件对象,然后在任意需要监听这个事件对象的取得这个共享的EventDispatcher,并添加监听处理函数或方法。

例子1:使用同一父亲的EventDispatcher。EventDispatcher是 DisplayObject 类的基类。

test.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx"  xmlns:c="customer.*">
 <fx:Script>
  <![CDATA[
   import mx.events.FlexEvent;
   import customer.CustomEvent;

  ]]>
 </fx:Script>
 <s:Group>
  
<s:layout>
 <s:HorizontalLayout />
</s:layout>
 <c:CustomCanvas2 id="main"  height="108" width="168"/>
 <c:CustomCanvas1 id="two"  height="108"/>
 </s:Group>
</s:WindowedApplication>

CustomCanvas2
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <mx:Canvas width="160" height="100" backgroundColor="#E5E4E4">
  <fx:Script>
   <![CDATA[
   private function clickHandler(event:MouseEvent):void{
   var custom:CustomEvent=new CustomEvent(CustomEvent.EVENT_NAME);
   //custom.data is Object;//发送事件同时,可以传值(可传可不传)
   custom.data=mytxt.text;
   this.parent.dispatchEvent(custom);
   }
   ]]>
  </fx:Script>
  <mx:TextInput id="mytxt" text="CustomEvent Data" width="140" x="10" y="10"/>
  <mx:Button click="clickHandler(event);" label="Send CustomEvent" x="10" y="40"/>
 </mx:Canvas>
</s:Group>
CustomCanvas1
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" creationComplete="init();">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <mx:Canvas  width="150" height="100" backgroundColor="#E5E4E4">
  <fx:Script>
   <![CDATA[
   import mx.controls.Alert;
   private function init():void{
   this.parent.addEventListener(CustomEvent.EVENT_NAME,clickHandler);
   }
   private function clickHandler(event:CustomEvent):void{
   trace("I get it !");
   mylb.text=event.data.toString();
   Alert.show(event.toString()+"\n"+event.data.toString())
   }
   ]]>
  </fx:Script>
  <mx:TextArea id="mylb" x="10" y="10" width="130" height="80"/>
 </mx:Canvas>
</s:Group>

 

方法2:

test.mxml
同上
CustomCanvas1
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" creationComplete="init();">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <mx:Canvas  width="150" height="100" backgroundColor="#E5E4E4">
  <fx:Script>
   <![CDATA[
   import mx.controls.Alert;
   private function init():void{
   CustomEvent.dispatcher.addEventListener(CustomEvent.EVENT_NAME,clickHandler);
   }
   private function clickHandler(event:CustomEvent):void{
   trace("I get it !");
   mylb.text=event.data.toString();
   Alert.show(event.toString()+"\n"+event.data.toString())
   }
   ]]>
  </fx:Script>
  <mx:TextArea id="mylb" x="10" y="10" width="130" height="80"/>
 </mx:Canvas>
</s:Group>
CustomCanvas2
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <mx:Canvas width="160" height="100" backgroundColor="#E5E4E4">
  <fx:Script>
   <![CDATA[
   private function clickHandler(event:MouseEvent):void{
   var custom:CustomEvent=new CustomEvent(CustomEvent.EVENT_NAME);
   //custom.data is Object;//发送事件同时,可以传值(可传可不传)
   custom.data=mytxt.text;
   CustomEvent.dispatcher.dispatchEvent(custom);
   }
   ]]>
  </fx:Script>
  <mx:TextInput id="mytxt" text="CustomEvent Data" width="140" x="10" y="10"/>
  <mx:Button click="clickHandler(event);" label="Send CustomEvent" x="10" y="40"/>
 </mx:Canvas>
</s:Group>
CustomEvent.as
package customer
{
 import flash.events.Event;
 import flash.events.EventDispatcher;
 public class CustomEvent extends Event
 {
  public static const EVENT_NAME:String="event_name";
  
  public static const dispatcher:EventDispatcher=new EventDispatcher();
  public var data:Object;
  
  public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false, data:Object=null)
  {
   super(type, bubbles, cancelable);
   this.data=data;
  }
  override public function clone():Event{
   return new CustomEvent(type, bubbles, cancelable, data);
  }
 }
}
0
1
分享到:
评论

相关推荐

    oracle数据库监听配置

    在出现的网络地址栏的协议下拉选项中选中“TCP/IP”,主机文本框中输入主机名称或 IP 地址,端口文本框中输入数字端口,默认是 1521,也可以自定义任意有效数字端口。 五、数据库服务配置 数据库服务配置是指在 ...

    Android-囊括了最实用的RxJava工具类集合

    全局订阅意味着在整个应用范围内都可以接收到特定事件,这对于需要跨多个组件监听同一事件的情况非常有用。而局部订阅则只在特定的订阅者范围内生效,这有助于降低内存占用和提高性能。同时,提供注销功能使得在不再...

    Oracle数据库监听配置[归纳].pdf

    注意这里的全局数据库名与数据库 SID 有所区别,全局数据库名实际通过域名来控制在同一网段内数据库全局命名的唯一性,就如 Windows 下的域名控制器,如这里可以输入 myoracle.192.168.1.5。 本地服务名配置是基于 ...

    同一父页面的一个子页面刷新另一个子页面

    4. **事件监听**:在子页面中,我们需要设置事件监听器来响应来自父页面的消息。一旦接收到消息,可以执行相应的操作,比如刷新页面内容。而在父页面中,我们则需要根据用户的行为或其他条件触发`postMessage`发送...

    Android上下左右滑动支持同时滑动斜向任意方向滑动大图片浏览大图表浏览

    这样的实现可能涉及到监听触摸事件,然后根据手指的移动来决定内容应该如何滚动。为了防止滑动冲突,开发者可能需要实现一套智能的滑动检测机制,比如检测滑动手势的方向和强度,确保在不同方向的滑动之间平滑过渡。...

    详解Html5 监听拦截Android返回键方法

    1. `state`参数是一个任意的JavaScript对象,它与新URL关联,可以在`popstate`事件触发时使用。 2. `title`参数是新页面的标题,但由于浏览器通常忽略这个值,所以通常填`null`。 3. `url`参数是新的URL,必须与当前...

    Java测试试题一套

    当事件发生时,会调用监听器对象的相应方法。所以答案是C。 4. 事件处理类的实现位置:事件处理类的代码通常会放在处理事件的组件类中,因为事件是由组件产生的,组件需要知道如何响应这些事件。因此答案是D。 5. ...

    JAVA 课件

    - **Event Handler**:处理事件的代码,即事件监听器。 - **AWTEvent**:封装了事件信息,如事件源和事件详情。 - **AWTEventListener**:实现了监听器接口,用于处理特定类型的事件。 事件监听器的注册通常通过...

    用OLE实现任意窗口拖拽功能

    5. 监听拖放事件:目标窗口需要继承COleDropTarget,重写OnDropEx方法,处理数据的接收和处理。 6. 注册拖放:调用RegisterDragDrop函数,将源窗口注册为拖放源,目标窗口注册为拖放目标。 四、安全与优化 在实际...

    JavaScript事件冒泡与事件捕获实例分析

    当有大量相似元素需要响应同一类型事件时,可以将事件监听器添加到这些元素的共同父元素上,然后根据事件的目标元素(event.target)来判断并执行相应的操作。例如,一个列表中有多个项,而我们想要在点击任意一项时...

    html5 postMessage前端跨域并前端监听的方法示例

    当某个存储区域的数据发生变化时,同一源下的所有窗口都会触发`storage`事件。这在单点登录场景中也很有用,可以用来监听用户状态的变化并同步到其他窗口。 总结来说,`postMessage`和`onstorage`结合使用,可以在...

    js表单事件详细汇总

    此外,现代的JavaScript开发中,更推荐使用addEventListener方法来添加事件监听器,这样可以更灵活地管理事件处理,而且不会影响其他可能绑定在同一元素上的其他事件监听器。在处理表单事件时,了解每一个事件的工作...

    WPF DataGrid 行拖拽

    1. **事件监听**:我们需要监听鼠标事件,如MouseDown、MouseMove和MouseUp,以检测用户是否开始拖动行。在MouseDown事件中,记录下被点击的行,同时开启MouseMove事件监听。当鼠标移动一段距离后(称为阈值),判定...

    div模拟select实用版

    同时,我们可以添加事件监听器,确保当用户点击页面上的其他任意位置时,下拉菜单会自动收起。 实现这个功能的核心技术包括: 1. **CSS**:用于定义`div`的样式,包括布局、颜色、字体等。通过CSS,我们可以让这些...

    单机版五子棋(本系统为单机版小型游戏,仅有鼠标左键和右键两种角色,单击左键为圆,单击右键为叉,单击网格线则重新开始新一轮的比赛,当同一角色在任一方向有连续五个时,则为获胜者。)

    在棋盘上,任意一方的棋子在横、竖、斜线上形成连续五个,即宣告胜利。这种规则鼓励玩家进行策略性的思考,既要考虑如何连成五子,又要防止对手形成连线,增加了游戏的趣味性和挑战性。 在游戏的实现过程中,开发者...

    实现无刷新跟换URL,适用于特定情境的历史返回

    状态对象可以是任意JavaScript对象,用于在`popstate`事件触发时访问。新的URL不必与当前页面相同,但必须在同一源下。 3. `replaceState()`方法: 这个方法与`pushState()`类似,但它会替换当前的历史记录条目,...

    鼠标钩子、键盘钩子,供学习hook知识的人看阅

    本地钩子仅能监听在安装钩子的同一进程中的事件,而全局钩子则能够监听整个系统的事件,包括其他进程中的事件。在描述中提到的“捕获在Windows平台下任意窗口上的键盘操作”就是全局钩子的应用场景。 4. **钩子的...

    JavaScript忍者秘籍(第2版)读书笔记

    2. **事件监听器**:JavaScript代码注册事件监听器,当事件发生时,浏览器调用相应的事件处理器。 3. **事件队列**:浏览器使用事件队列管理未处理的事件,一次只处理一个事件,避免阻塞UI。 4. **事件处理异步性*...

    动态定时任务 SpringBoot quartz集群分布式。动态指定任意-demo-quartz-dynamic.zip

    在SpringBoot中,我们可以使用`@DisallowConcurrentExecution`注解确保同一任务不会并发执行,`@PersistJobDataAfterExecution`注解则用于在任务执行后保存数据。通过`@Component`注解将Job类注册为Spring的bean,再...

Global site tag (gtag.js) - Google Analytics