Problem
as Flex documentation states, the way to pass additional parameters to event listener is to use MXML tag., here is how to archive that using ActionScript.
Solution
Using Inline Function
Detailed explanation
solution is very simple, basically for following scenario :
arbitrary button called ABCButton,function ABCButtonListener needs to listen to click event and also receive extra parameter
引用
"myPrivateSpecialObject"
object.
you do following :
private function ABCButtonListener(e:MouseEvent,specialObj:Object):void
{
Alert.show(specialObj.name);
}
private function methodWhereyouDostuffAndRegisterListener(): void
{
var myPrivateSpecialObject:Object = {name:"Special String Ingredients for Orange"};
ABCButton.addEventListener(MouseEvent.CLICK,
function(e:MouseEvent) :void
{
ABCButtonListener(e,myPrivateSpecialObject);
});
}
P.S -----------------
you can use same structure to register listener for more than one button,for example :
private function methodWhereyouDostuffAndRegisterListener(): void {
var myPrivateSpecialObject:Object = {name:"Special String
Ingredients for Orange"};
ABCButton.addEventListener(MouseEvent.CLICK,function
(e:MouseEvent) : void {
ABCButtonListener(e,myPrivateSpecialObject);
// if removing event listener is desired uncomment below:
//IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
});
myPrivateSpecialObject = {name:"Special Ingredients for
Apple"};
OtherButtonButton.addEventListener(MouseEvent.CLICK,function
(e:MouseEvent) : void {
OtherButtonButtonListener(e,myPrivateSpecialObject);
// if removing event listener is desired uncomment below:
//IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
});
}
above code registers same listener for two buttons but before registering second listener , we try to modify
引用
myPrivateSpecialObject
. so, reference is changed to have different value, but if you assume now each listener received different value , its not correct, they will both received latest assigned value . overall inline function is good technique to pass any number of parameters to a listener as long as listener is ready for those parameters.
UPDATE: way to remove linine functions from event listeners afterwards.
basically, if you want to remove inline function as listener from DIspatcher, there is two ways,
one is to add it as weakRefference, but second is even better:
just add this inside the Listener Function:
IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
分享到:
相关推荐
当调用`$(selector).customEvent()`时,就会为这些元素添加事件监听器。触发事件可以使用`$(selector).trigger('customEvent')`。 除了简单的触发事件,我们还可以传递参数。例如,当我们触发事件时,可能需要传递...
事件绑定是指在网页中添加事件监听器的过程,当特定的用户操作发生时,比如点击、鼠标移动、按键操作等,就会触发事先设置好的函数进行响应。在早期的JavaScript中,我们通常通过在HTML标签上直接使用事件属性来实现...
通过在类上添加相应的注解,比如@WebListener,即可将该类标记为一个事件监听器。 过滤器和监听器的执行顺序是由web.xml文件中的元素或者使用注解的顺序来控制的。过滤器可以在web.xml中配置多个Dispatcher类型,...
在Spring框架中,监听器(Listener)是一种关键的组件,它们允许开发者在应用程序的特定事件发生时执行相应的处理逻辑。本文将对Spring监听器进行深入浅析,包括其工作原理、源码解析以及如何使用。 首先,Spring...
原因可能是监听器模式允许为不同类型的事件指定不同类型的监听器,从而避免了观察者模式中需要通过instanceof等方式区分消息类型的问题。 Spring的消息机制主要涉及三个关键组件: 1. **Spring事件**:Spring事件...
自定义事件类可以添加额外的属性,以便在事件处理函数中访问更多数据。 8. **事件生命周期** 事件经历以下阶段:目标阶段(事件发生在目标对象上)、冒泡阶段(事件向上冒泡至父级)和捕获阶段(事件向下捕获至根...
- `args: [4]`指定了传递给监听器函数的额外参数。 最后,通过`fireEvent`方法触发了名为`myEvent`的事件,此时`handleEvent`函数将会被调用,并输出`Event handled with testId: 4`。 #### 四、总结 通过本文对`...
在Flex中,有两种方式添加事件监听器:使用`addEventListener`方法或在MXML组件标记中使用`event`属性。`addEventListener`允许动态添加和移除事件监听器,而MXML则提供了更直观的声明式绑定。事件处理程序通常包含...
4. **实现方式**:在JavaScript中,我们使用`addEventListener`方法添加事件监听器,并设置`useCapture`参数为`false`(默认值,表示事件冒泡阶段)来实现事件代理。例如: ```javascript const parentElement = ...
此外,如果你的头部视图需要响应用户的触摸事件,记得设置点击监听器。例如,你可以将一个Button放在头部视图中,并为其添加`OnClickListener`。 综上所述,添加头部到Android的ListView是一项常见的自定义需求。...
这些封装函数负责处理不同浏览器间的事件模型差异,确保事件监听器可以在不同的浏览器中正确地添加和移除。 DOM事件模型的关键特性包括事件冒泡(事件从被点击的元素向上层元素传播)和事件捕获(事件从顶层元素向...
在IT行业中,事件发射器(Event Emitter)是一种常见的设计模式,它允许对象在特定事件发生时通知其他组件。在微服务架构或者模块化开发中,这种通信方式尤为重要。"微型类型安全事件发射器"(Micro Type-Safe Event...
- 要响应自定义事件,需要在目标组件上添加事件监听器。可以使用`addEventListener()`方法,传入自定义事件的类型、监听函数和可选的捕获阶段参数。 5. **处理事件** - 监听函数将被调用,当自定义事件被派发时。...
以上介绍了Vue中事件监听的各种实例,包括计算属性的使用、方法与计算属性的性能对比、v-on指令的使用、传参在事件监听中的应用等。掌握这些知识点将有助于开发者在实际项目中更加高效和灵活地应用Vue框架,设计出...
为了让emit方法能够向监听器函数传递参数,我们对emit方法进行修改,使得当调用emit时可以接收额外的参数并将这些参数传递给监听器函数。 ```javascript // 修改emit方法以支持传递参数给监听器 emit(eventName, .....
- `attachEvent`: 这是IE浏览器特有的方法,与`addEventListener`类似,用于在IE中添加事件监听器。由于IE不支持`addEventListener`,所以用`tab[i].attachEvent("onmouseover", swap(i));`来兼容。 2. **闭包**:...
监听器通常会有一个接收事件参数的方法,如`setinfo`,在这个方法中,我们可以访问事件携带的数据并执行相应的处理逻辑。 7. **事件取消**: 如果事件的`cancelable`属性设置为`true`,那么在事件处理过程中,可以...
当一个事件被触发时,它会从根节点开始向下传递,直到到达实际产生事件的目标对象,并且沿途检查是否有相应的事件监听器。例如,在下面的代码片段中,如果`VBox`组件发生了`resize`事件,则事件流会从根节点`...
为了响应事件,我们需要添加事件监听器。这可以通过调用控件的addEventListener方法完成,传入事件类型、事件处理函数和可选的捕获阶段参数。事件处理函数会在事件触发时被调用。 5. 事件处理函数: 这是实际执行...
4. **触发事件**:`Event::trigger` 方法接收事件名作为参数,并通过 `func_get_args` 获取所有传入的额外参数。它检查事件是否存在监听器,然后遍历并执行与该事件关联的所有回调。如果回调标记为一次性事件,`...