【问题标题】:Flex adding event listeners with callback functions which have no argumentsFlex 添加带有没有参数的回调函数的事件监听器
【发布时间】:2009-06-10 08:30:40
【问题描述】:
fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler);

  private function uploadCompleteHandler(event:Event):void {}

以上是在 Actionscript 中添加事件侦听器的一种方法。 默认情况下,回调函数需要有一个参数 命名事件并输入事件。 有没有办法在没有任何参数的情况下声明这个函数:

  private function uploadCompleteHandler():void {}

编辑:可以在 mxml 中添加不带任何参数的事件处理程序。所以一位学生想知道,为什么不能在 actionscript 中做同样的事情?

【问题讨论】:

  • 你为什么要这样做?
  • 可以在 mxml 中添加不带任何参数的事件处理程序。所以一位学生想知道,为什么不能在 actionscript 中做同样的事情?

标签: apache-flex actionscript-3 event-handling


【解决方案1】:

原因是在 mxml 中你写的实际上不是处理程序,而是在处理程序中执行的内容。如果您使用 -keep-generated-actionscript 标志进行编译(要在 Flex Builder 中设置它,请右键单击以打开项目属性,选择 Flex Compiler,并将 -keep-generated-actionscript 添加到 Additional compiler arguments),您可以在为您的组件生成源,编译器为该事件创建了一个处理程序,并且主体由您在 mxml 中编写的内容组成。

所以如果你有类似的东西:

click="doSomething();"

您已经注意到,您实际上是在此处给出指令,而不是像使用 addEventHandler 时那样传递的方法引用。

然后您将在生成的文件中包含以下内容:

private function myComponent_Click(evt : MouseEvent) : void
{
    doSomething();
}

在同一个文件的其他地方添加事件监听器:

this.addEventListener(MouseEvent.CLICK, myComponent_Click);

请注意,第二个参数不是函数结果,而是函数引用,因为缺少表示函数调用的括号,而且我们的特定函数也不是 getter。

你也可以在mxml中指定更多的调用,比如:

click="doSomething(); doSomethingElse();"

您甚至可以将事件参数传递给您的方法:

click="doSomething(event);"

无论您在 mxml 事件的值中写入什么(不确定是否使用正确的术语),都将成为 actionscript 事件生成的处理程序的主体。

【讨论】:

    【解决方案2】:

    不,如果您尝试将其注册为事件侦听器,则会在事件触发时收到运行时异常。

    您可以使用以下语法来允许在没有事件对象的情况下直接调用您的处理程序:

    private function uploadCompleteHandler(event:Event = null):void {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      相关资源
      最近更新 更多