flash - 将参数传递给事件监听器/处理程序

标签 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  
}

我不太了解编程术语,所以我将上面的方法称为妖精技术。在对象中存储/隐藏变量以供以后使用/访问。它解决了我所有的问题并且效果非常好。但是,如果有更好的方法来做到这一点,我想知道那样

最佳答案

是的,我知道你的意思。我所做的是扩展事件并调度自定义事件。这样我就可以在自定义事件中创建包含必要数据的属性。看起来很干净,但确实需要一些努力。这并不理想,但我不知道有更好的方法。

关于flash - 将参数传递给事件监听器/处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464925/

相关文章:

java - 批量下载器 - Flash、Java、Air?

actionscript-3 - AS3 中的 Foo 是什么?

javascript - 简单的事件监听器不工作 - JS

javascript - 从外部的 javascript 控制 Flash 播放器?

flash - 在多个版本的 Flash 播放器之间切换以便于测试的最佳方法?

actionscript-3 - 在 AS3 List 控件(flash.controls.List)中设置字体名称和大小

windows - Windows 上的 Adob​​e Air 中的标题栏图标大小错误

actionscript-3 - AS3如何使用appendBytes限制AAC流音频的NetStream缓冲

firefox-addon - Firefox 30 上的 window.onload

javascript - 添加事件监听器的多个功能