Dan*_*lho 10 flash actionscript-3 addeventlistener
如何通过事件监听器传递参数/变量?我使用匿名函数相当有效地克服了这个问题; 这是一个非常简单的解决方案,但在一天结束时,它闻起来像一个巨大的功能漏洞,我认为应该是本地提供的.
通常生活会继续,但是就像命运一样,现在我实际上需要删除监听器,当你使用匿名函数时这样做有点时髦.所以,再次,我试图找出如何将参数传递给事件侦听器,以便可以通过简单地引用该函数来删除事件侦听器.
奇怪,因为它看起来,我已经克服了这个问题,以及,但我不喜欢它,累了使用它的.在我看来,它是代码味道.但它就像一个魅力.我将变量,对象或其他内容存储在调度MovieClip上.因此,如果我循环访问数据数组,即时生成缩略图,我只需将数据变量(通常是具有多个属性的对象)存储在实际的缩略图MovieClip中.然后我可以通过引用访问事件监听器方法中的所有数据:
event.target.data.在这个例子中,"data"是持有我想要的信息的变量的名称.因为当我不使用它时出现的另一个问题是,当我循环遍历数组并生成单击以查看大图像的缩略图时,索引不一致.在循环结束时,所有缩略图都将使用最后一个索引"i"打开图像.因此,如果我有一个长度为12的数组,无论你点击什么缩略图,它们都会加载第12个图像.将数据存储到MovieClip本身,创建一个永不改变的可靠引用.
这已经困扰了我一段时间了.基本上我想知道的是,这是一个好的做法,那里有更好的解决方案吗?
以下是一些饮食示例.如有必要,我可以发布更详细的例子.所有示例都描述了在单击时加载大图像的缩略图.
不使用匿名函数(问题):
tempThumb.addEventListener(MouseEvent.CLICK, loadImage);
public function loadImage(_event:MouseEvent):void
{
// I don't have the variable _url and preparing a hot bath with a cold blade
}
使用匿名函数:
tempThumb.addEventListener(MouseEvent.CLICK, function(_event:MouseEvent) { loadImage("large.jpg"); } );
public function loadImage(_url:String):void
{
// I got the variable _url and packing away the razor blades
}
没有使用匿名函数,但使用我的臭妖精技术将数据存储到MovieClip中调度事件
tempThumb.data = "large.jpg";
tempThumb.addEventListener(MouseEvent.CLICK, loadImage);
public function loadImage(_event:MouseEvent):void
{
trace(event.target.data);
// I can access the variable
}
我对编程术语并不了解,所以我将上面的妖精技术称为.在对象中存储/隐藏变量以供以后使用/访问.它解决了我所有的问题并且工作得非常好.但是,如果有更好的方法,我想知道这种方式.
如果您不喜欢将数据存储在目标成员中,则可以使用所谓的“委托”。两者都不比另一个更好。这主要只是偏好。
这是委托类的示例(没有内置):http://www.actionscript.org/resources/articles/205/1/The-Delegate-Class/Page1.html
如果事件调度程序不是您自己的类,这可能是最好的主意。否则,将变量存储在您自己的类中根本不是一个坏主意。只是 OOP 风格。
干杯。
| 归档时间: |
|
| 查看次数: |
13404 次 |
| 最近记录: |