Apache flex 如何从Papervision类中以编程方式添加flex组件而不使用此。父。。。?

Apache flex 如何从Papervision类中以编程方式添加flex组件而不使用此。父。。。?,apache-flex,actionscript-3,actionscript,flex4,papervision3d,Apache Flex,Actionscript 3,Actionscript,Flex4,Papervision3d,我有一个flex应用程序和一个papervision基本视图。我想在papervision类中添加一个新的flex UIComponent(如按钮)。我已经在下面发布了完整的示例代码。它可以工作,但我希望能够在没有“(this.parent.parent as Group).addElement(button);”行的情况下实现我的目标 //快速入门.as 包装{ 导入org.papervision3d.view.BasicView; 公共类快速入门扩展了BasicView { 公共函数快速启

我有一个flex应用程序和一个papervision基本视图。我想在papervision类中添加一个新的flex UIComponent(如按钮)。我已经在下面发布了完整的示例代码。它可以工作,但我希望能够在没有“(this.parent.parent as Group).addElement(button);”行的情况下实现我的目标


//快速入门.as
包装{
导入org.papervision3d.view.BasicView;
公共类快速入门扩展了BasicView
{
公共函数快速启动()
{
超级(500,500,真,真);
}
公共函数GoTime():void
{
var按钮:按钮=新按钮;
//这是令人不快的路线
(this.parent.parent作为组)。addElement(按钮);
}
}
}

我的版本确实有效,因此请原谅任何小的输入错误。

从逻辑上讲,您可以在您的
基本视图中发送一个事件,在主应用程序中侦听它,然后从上面创建按钮。在一个完美的OOP世界中,每个类都应该是一个发送事件的黑盒子:)

从逻辑上讲,您可以在
基本视图中调度一个事件,在主应用程序中侦听它,然后从上面创建按钮。在完美的OOP世界中,每个类都应该是发送事件的黑盒:)

+1“在完美的OOP世界中,每个类都应该是发送事件的黑盒”我完全同意+最后一句也是。但如果我这样做,我将如何保持对该按钮的访问?如果我在基本视图中创建按钮,以该按钮作为目标发送事件,让主应用程序在听到事件时添加按钮,会怎么样?为什么您需要在
基本视图中保持对该按钮的访问权限?目标不应该像你想做的那样被调整;如果你需要随事件一起发送一些东西,你应该创建你自己的事件类型,包括一个属性。这实际上就是我的意思,而且混淆了我的术语。我在Flex/AS3/Papervision上工作了一个月左右。我现在正在实现自定义事件。无论如何,我仍然认为您应该在主应用程序中创建按钮。。。将一个组件放入事件中是很奇怪的(但好吧,您可以自由地这样做:p)。当您必须创建自定义事件时,它主要是将一些数据(索引、字符串、对象)放入其中,而不是可视化组件。为什么你还需要参考BasicView中的按钮?+1“在完美的OOP世界中,每个类都应该是发送事件的黑盒子”,我完全同意+最后一句也是。但如果我这样做,我将如何保持对该按钮的访问?如果我在基本视图中创建按钮,以该按钮作为目标发送事件,让主应用程序在听到事件时添加按钮,会怎么样?为什么您需要在
基本视图中保持对该按钮的访问权限?目标不应该像你想做的那样被调整;如果你需要随事件一起发送一些东西,你应该创建你自己的事件类型,包括一个属性。这实际上就是我的意思,而且混淆了我的术语。我在Flex/AS3/Papervision上工作了一个月左右。我现在正在实现自定义事件。无论如何,我仍然认为您应该在主应用程序中创建按钮。。。将一个组件放入事件中是很奇怪的(但好吧,您可以自由地这样做:p)。当您必须创建自定义事件时,它主要是将一些数据(索引、字符串、对象)放入其中,而不是可视化组件。为什么还要在基本视图中引用按钮?
<!--Application MXML-->
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="50" minHeight="50"
        creationComplete="Init()" applicationComplete="Start()">
    <fx:Script>
        <![CDATA[
            import mx.core.UIComponent;
            import spark.components.Button;
            public var start:QuickStart;
            public function Init():void
            {
                start = new QuickStart();
                var uicomp:UIComponent = new UIComponent();
                addElement( uicomp );
                uicomp.addChild( start );
            }

            public function Start():void
            {
                start.GoTime();
            }
        ]]>
    </fx:Script>
</s:Application>


//QuickStart.as
package{
    import org.papervision3d.view.BasicView;
    public class QuickStart extends BasicView
    {
        public function QuickStart()
        {
            super(500, 500, true, true);
        }

        public function GoTime():void
        {
            var button:Button = new Button;

            //this is the offending line
            (this.parent.parent as Group).addElement(button);
        }
    }
}