打印

[AS3] as3事件处理机制的一些缺陷

欢迎探讨,原文出处 http://www.asarea.cn/showdiary.jsp?id=141

按照常理,所谓事件机制是指不同的对象之间相互进行消息传递通讯的一种处理方法。譬如我发短信给你,消息的两端是我和你,而这个事件就是短信。通常情况下这个消息由一个消息处理中心统一进行处理分发,类似于邮局发信。

常规来说,这个事件应该有两个属性,一个是发出者,一个是接收者。发出者只管发送,而接收者要负责接收并做出回应也就是处理。



As3中的事件不是这样的,其消息也就是EVENT有一个属性叫target,不要混淆,对于我发送短信给你这个例子,target居然不是你,而是我,添加事件侦听addeventlistener的居然是我不是你。

其实应该这么理解,消息分很多种,一种是某对象主动发出的非界面人机交互事件,一种是人机交互事件,譬如鼠标单击等。这两类事件最大的区别是主动和被动,第一种事件有一个明确的主动的发出者,但该发出者并不就是事件接收者,而第二种事件有一个明确的接受者,但该接收者可以认为是被迫的事件发出者。

而as3种并没有对这两类事件进行区分,所以对于对第二种事件来说,这种机制是很实用的,就是事件的接收者就是被迫的事件发出者,譬如鼠标单击某元件A,A自然被迫发出一个被单击事件,事件的目标target就是A,也就是事件的接收者也就是A(指一般情况下,不考虑as3提供的事件流机制)。

但是对于某个主动事件发出者,这种机制就显得有些唐突了,我发出一个事件,结果这个事件的target居然就是我自己,有些难以理解。但是考虑as事件机制主要用于人机交互,主要用于被动事件,我被加到舞台上,我被单击,我被激活。。。

对于as中的主动发出事件(特别是我们自己定义的事件),一般都是这样处理,譬如A发出事件,目标其实应该是B,我们就把这个事件的处理函数func放在B中,而在A中addEventListener(B.func),总之有些不爽。
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
如果是采用dispatchEvent这种形式就和你描述的短信例子符合了..
应该是楼主理解问题。我发短信给你,target当然是事件的发送者dispatcher,即“我”,接受者“你”就是根据这个target来判别是“我”发的,而不是别人发的。这个target不是发送的目的地,是针对事件来的。target是事件的一个属性,告诉你这个事件是谁发送的,而不是谁接受的。至于addEventListener,同样的道理。
那为什么居然由主动发送者addlistener呢?而处理函数却放在接收者那边,不觉得应该由接收者addlistener么

[ 本帖最后由 sshong 于 2008-6-12 17:45 编辑 ]

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
当然要放在接受者那边,我发短信让你过来,难道不是你执行吗?

TOP

发送者  米国土砖公司(类对象),把信交给邮局(dispatcher),然后大陆经典公司(类对象)接受邮局(dispatcher)送来的信

是不是可以这样理解
57950633

TOP

似乎应该dispathcer是个邮差,只不过displayOjbect都自己带有一个邮差而已.
邮包里能顺路放很多邮件
57950633

TOP

如果是类里面用   接受者这边直接就是this了  还要个target有毛用    这个target是方便你获取发送者的

TOP