FLEX,Actionscript:如何调用CustomEvent?

时间:2010-05-05 14:57:53

标签: flex actionscript-3

我在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))" />

感谢

3 个答案:

答案 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之类的东西然后捕获它以查看是否有效。不确定使用与标准类型相同的类型名称是一种很好的技术。