在AS3类中引用父MXML?

时间:2012-02-27 12:30:41

标签: actionscript-3 flex air flash-builder mxml

我的Flex项目中有一个AS3类:

package system
{
    import mx.managers.PopUpManager;

    import ui.Eula;

    public class Dialogs
    {
        public function Dialogs(){}

        public static function showEula():void {
            var eulaWindow:Eula = new Eula;
            PopUpManager.addPopUp(eulaWindow,MyMainMXML,true);
        }
    }
}

MyMainMXML是我的基础MXML文件。它不会让我通过我的班级参考它。我怎么做?编译器错误如下:

1067:将类型Class的值隐式强制转换为不相关的类型flash.display:DisplayObject。

主MXML文件是一个Spark WindowedApplication,所以我认为它是DisplayObjects的一部分。

编辑:

我尝试使用类似下面的FlexGlobals,但它发出错误,上面写着 1118:使用静态类型Object将值隐式强制转换为可能不相关的类型flash.display:DisplayObject。

package system
{
    import mx.core.FlexGlobals;
    import mx.managers.PopUpManager;

    import ui.Eula;

    public class Dialogs
    {
        public function Dialogs(){}

        public static function showEula():void {
            var eulaWindow:Eula = new Eula;
            PopUpManager.addPopUp(eulaWindow,FlexGlobals.topLevelApplication,true);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以从

获得主要的应用程序参考

FlexGlobals.topLevelApplication

mx.core.FlexGlobals.topLevelApplication:顶级应用程序对象,无论对象在文档树中的哪个位置执行。此对象的类型为spark.components.Application或mx.core.Application。

答案 1 :(得分:1)

使用FlexGlobals.topLevelApplication返回一个Object类型的对象(是的,我知道,这听起来很红:P)。但是,如果是DisplayObject,则为addPopUp第二个参数。因此,这应该做的伎俩:

PopUpManager.addPopUp(eulaWindow,FlexGlobals.topLevelApplication as DisplayObject,true);

我不是100%确定为什么FlexGlobals.topLevelApplication不返回DisplayObject,可能是一个低级问题。