Apache flex 加载URL时不会激发Event.Complete

Apache flex 加载URL时不会激发Event.Complete,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我是一名经验丰富的开发人员,但这是关于flex的一些非常基本的东西,我无法理解。在下面的类中,我不确定为什么在图像加载url时不会执行imageLoaded函数。这里有比赛条件吗?创建此对象并调用setPicture时,应用程序已完全加载在这种情况下,如何使事件正确触发。完成事件? line和Log.info函数对我来说很方便,它们肯定能工作 以下是我的MXML定义: <?xml version="1.0" encoding="utf-8"?> <photo:PhotoClas

我是一名经验丰富的开发人员,但这是关于flex的一些非常基本的东西,我无法理解。在下面的类中,我不确定为什么在图像加载url时不会执行imageLoaded函数。这里有比赛条件吗?创建此对象并调用setPicture时,应用程序已完全加载在这种情况下,如何使事件正确触发。完成事件?

line和Log.info函数对我来说很方便,它们肯定能工作

以下是我的MXML定义:

<?xml version="1.0" encoding="utf-8"?>
<photo:PhotoClass xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:photo="com.xxx.widgets.photo.*">
    <mx:Image id="image"/>
</photo:PhotoClass>
我想出来了

除非精灵连接到应用程序,否则eventListeners不会注册。本例中的eventListener是在将精灵添加到其父类之前添加到构造函数中的。我把image.addEventListener移到了setPicture,它成功了。

我想出来了

除非精灵连接到应用程序,否则eventListeners不会注册。本例中的eventListener是在将精灵添加到其父类之前添加到构造函数中的。我将image.addEventListener移到了setPicture,它成功了

除非精灵附加到应用程序,否则eventListeners不会注册

你能给我推荐信吗?因为我相信这个问题是另外一回事

当您声明一个mxml文件,并将
PhotoClass
作为其根标记时,您正在扩展PhotoClass。mxml中的
标记
在mxml类中定义了Image类型的公共变量;您已经有了一个
公共var image:image在超类中。这将产生一个冲突——我预计会出现编译时错误

我的猜测是,由于构造函数是首先被调用的,它将
Image
对象分配给公共变量
Image
。当执行mxml并创建子项时,它会将一个新的
Image
对象分配给公共变量
Image
(而不是正确地抛出错误)。现在,事件侦听器被添加到构造函数中创建的
Image
实例中,但是当您在
setProperty
中设置
Image.source
时,它是一个完全不同的对象。这就是为什么当您将事件侦听器移动到
setPicture
时,它会起作用-在这里您将它分配给新对象

将mxml图像标记的
id
更改为其他内容,即使事件侦听器是从构造函数添加的,它也会工作。将public var image的名称更改为其他名称,您将在
PhotoClass
中得到编译时错误

顺便说一句,mxml中的图像标签是做什么的?它是用来显示不同的图像的吗?在这种情况下,您必须更改其
id

<!-- MyCanvas.mxml -->
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Label id="lbl"/>
</mx:Canvas>

<!-- the main application class -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" 
   creationComplete="onCreate()" layout="vertical">
  <local:MyCanvas id="canvas1"/>
  <mx:Script>
    <![CDATA[
      public var canvas2:MyCanvas;
      public function onCreate():void
      {
        this.canvas1.lbl.text = "MyCanvas_1";
        canvas2 = new MyCanvas();
        this.addChild(canvas2);
        canvas2.addEventListener(FlexEvent.CREATION_COMPLETE, onCanvas2Created);
      }
      public function onCanvas2Created(e:FlexEvent):void
      {
        this.canvas2.lbl.text = "MyCanvas_2";
      }
    ]]>
  </mx:Script>
</mx:Application>

除非精灵附加到应用程序,否则eventListeners不会注册

你能给我推荐信吗?因为我相信这个问题是另外一回事

当您声明一个mxml文件,并将
PhotoClass
作为其根标记时,您正在扩展PhotoClass。mxml中的
标记
在mxml类中定义了Image类型的公共变量;您已经有了一个
公共var image:image在超类中。这将产生一个冲突——我预计会出现编译时错误

我的猜测是,由于构造函数是首先被调用的,它将
Image
对象分配给公共变量
Image
。当执行mxml并创建子项时,它会将一个新的
Image
对象分配给公共变量
Image
(而不是正确地抛出错误)。现在,事件侦听器被添加到构造函数中创建的
Image
实例中,但是当您在
setProperty
中设置
Image.source
时,它是一个完全不同的对象。这就是为什么当您将事件侦听器移动到
setPicture
时,它会起作用-在这里您将它分配给新对象

将mxml图像标记的
id
更改为其他内容,即使事件侦听器是从构造函数添加的,它也会工作。将public var image的名称更改为其他名称,您将在
PhotoClass
中得到编译时错误

顺便说一句,mxml中的图像标签是做什么的?它是用来显示不同的图像的吗?在这种情况下,您必须更改其
id

<!-- MyCanvas.mxml -->
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Label id="lbl"/>
</mx:Canvas>

<!-- the main application class -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" 
   creationComplete="onCreate()" layout="vertical">
  <local:MyCanvas id="canvas1"/>
  <mx:Script>
    <![CDATA[
      public var canvas2:MyCanvas;
      public function onCreate():void
      {
        this.canvas1.lbl.text = "MyCanvas_1";
        canvas2 = new MyCanvas();
        this.addChild(canvas2);
        canvas2.addEventListener(FlexEvent.CREATION_COMPLETE, onCanvas2Created);
      }
      public function onCanvas2Created(e:FlexEvent):void
      {
        this.canvas2.lbl.text = "MyCanvas_2";
      }
    ]]>
  </mx:Script>
</mx:Application>


干得好;请务必把你自己的答案标记为正确答案。@www我相信这个问题是另外一回事。你能检查一下我的答案并确认一下吗?我现在没有使用编译器的权限。干得好;请务必把你自己的答案标记为正确答案。@www我相信这个问题是另外一回事。你能检查一下我的答案并确认一下吗?我现在没有访问编译器的权限。当我看到问题已经得到了回答;我没有仔细看一眼。幸运的是,我现在也不在编译器中。“mxml中的标记在mxml类中定义了一个类型为Image的公共变量;而您在超类中已经有一个公共变量Image:Image;。这将产生冲突-我预计会出现编译时错误。”Flex要求您再次声明此对象(作为公共对象)如果您希望能够在单独的类中执行任何脚本,请使用actionscript。因此,没有编译错误。事实上,它会抛出一个您没有遇到的错误。@Lava Flex要求您在actionscript中再次声明此对象(作为公共对象),如果您希望能够在单独的类中执行任何错误的脚本编写。每个mxml组件在类中创建一个公共变量,其名称是其id属性。您可以使用id属性+1从单独的类访问该组件,因为这很有意义。当我看到问题已经得到了回答;我没有仔细看一眼。幸运的是,我现在也不在编译器旁