繁体   English   中英

FLEX,ActionScript:如何调用CustomEvent?

[英]FLEX, Actionscript: how can I invoke a CustomEvent?

我在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传递参数标签:

从动作脚本,我正在尝试这样的事情,但它不起作用:

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

谢谢

尝试将回调代码包装在一个函数中:

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侦听器。

另外,您可能会因为未重写clone方法而收到TypeErrors。 您应该先解决此问题,然后再进行操作。

格尔茨
back2dos

您是否尝试过将类型更改为当前正在使用的类型以外的其他类型。 诸如CustomMouseEvent.MY_CUSTOM_MOUSE之类的东西,然后捕获它以查看是否可行。 不知道使用与标准类型相同的Type名称是否是一种好方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM