移动flex从外部swf创建类的实例返回null

时间:2013-03-03 14:53:08

标签: flash flex

我有两个使用Flash Builder 4.6创建的项目:

  1. 一个ActionScript项目
  2. 移动Flex项目
  3. 这两个项目都加载了包含影片剪辑资源的相同外部SWF文件(使用flash专业版CS6创建)(使用相同的共享代码加载外部swf文件)

    两个项目都扩展了swf资产文件中的影片剪辑。 例如,在swf文件中,我有一个名为“Test”的影片剪辑,其中包含一个文本字段。链接类是“MyTest”,文本字段的实例名称是“txt1”。

    我在两个项目中都有一个名为“MyTest”的类,它包含一个公共“txt1”属性和一个私有的“var counter:int”,一旦加载了swf,我使用以下代码创建一个类的实例:

    var x:MyTest = new MyTest();
    

    在actionscript项目中它工作得很好并且正确创建了x,文本字段txt1设置正确。

    但是,在flex项目中,txt1属性为null,因此该实例不是来自外部swf的“Test”影片剪辑的实例。

    我做错了什么?为什么它在actionscript项目中而不是在移动flex项目中工作? 这是完成所有这些工作的共享代码,我不想仅为flex项目重写一个新代码......

    感谢。


    让事情更清晰

    这段代码:

    var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("MyTest") as Class;
    var x:Object = new cls();
    trace(getQualifiedClassName(x));
    var y:MyTest = x as MyTest;
    

    将x设置为swf中定义的MyTest类型(没有“counter”属性“,y将为null(安全案例未成功)。

1 个答案:

答案 0 :(得分:0)

当你说

var y:MyTest = x as MyTest

然后显然这里出了点问题。通过链接ID在swc中定义的MyTest具有“stuff”(例如物理图形),即编译到Flex项目中的MyTest(通过允许变量y声明为类型的import语句) MyTest)不知道。因此,您有两个冲突的类定义,特别是如果它们都具有相同的名称空间。

我不希望y能够保存从库链接创建的MyTest的实例,并且我希望尝试从一个转换到另一个会使得null - 就像你报告的那样。

您最好创建一个ITest接口,为txt1声明一个getter / setter对(顺便说一句,我希望您不会将其用作实际的生产变量名)。然后演员应该工作得很好。