我在Flex中创建了一个自定义MouseEvent:
package {
import flash.events.MouseEvent;
public class CustomMouseEvent extends MouseEvent {
public var tags:Array = new Array();
public function CustomMouseEvent(type:String, tags:Array) {
super(type, true);
this.tags = tags;
}
}
}
现在我想了解如何从Actionscript和MXML传递参数标记:
从actionscript我正在尝试这样的事情,但它不起作用:
newTag.addEventListener(MouseEvent.MOUSE_UP, dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP,[newTag.name])));
从MXML开始,我正在这样做,它也不起作用:
<mx:LinkButton click="dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, bookmarksRepeater.currentItem.tags))" />
感谢
答案 0 :(得分:3)
尝试在函数中包装回调代码:
newTag.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, [e.currentTarget.name]));
});
我认为MXML代码的问题在于您使用转发器并尝试在重复完成后获取currentItem
。试试这个:
<mx:LinkButton click="dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, event.currentTarget.getRepeaterItem().tags))" />
希望有所帮助。
<强>更新强>
由于您在循环中创建newTag
对象,因此只需使用命名函数作为事件侦听器,您就可以获得更好的内存使用率。
newTag.addEventListener(MouseEvent.MOUSE_UP, onTagClick);
...
protected function onTagClick(e:MouseEvent):void {
dispatchEvent(new CustomMouseEvent(MouseEvent.MOUSE_UP, [e.currentTarget.name]));
}
这样你只能创建一个事件监听器,而不是n
那些做同样事情的监听器。
答案 1 :(得分:2)
另外,您可能因为没有覆盖克隆方法而获得TypeErrors。你应该在以后遇到它之前解决这个问题。
格尔茨
back2dos
答案 2 :(得分:0)
您是否尝试将类型更改为当前正在使用的类型之外的其他类型。像CustomMouseEvent.MY_CUSTOM_MOUSE之类的东西然后捕获它以查看是否有效。不确定使用与标准类型相同的类型名称是一种很好的技术。