从as3类创建的mxml组件调用方法?

时间:2011-06-16 16:15:01

标签: actionscript-3 mxml flash-builder

好吧,我总是只用as3开发我的项目而不是mxml,我通常只是设置我的应用程序来运行一个主要的actionscript文件作为我的主要doc根,有点像你在flash中如何做但在flash builder中我做这样的事情:

<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    .....etcetc
>

    <com:MyAS3DocClass>
    </com>

    <fx:Script>
        <![CDATA[
            public function call_from_outside():void
            {
                //Some code stuff here...
            }
        ]]>
    </fx:Script>

</s:Application>

现在说MyAS3DocClass中有一个公共函数:

public function hitme():void
{
    trace('ouch');
}

我的问题是,如何在hitme()标记之间的call_from_outside()函数中调用该函数<fx:Script>

我这样做的原因是因为我有一些flash swfs,我加载到另一个swf文件中,我可以访问那些flash swfs的顶级公共函数,但是flash builder / flex swfs的顶层是主要的mxml文件而不是我的假as3类根。当然我应该认为有一种方法可以访问mxml组件的as3类方法,但为了保持相同的结构,我可以绕过必须修改我的加载器脚本。有人有想法吗?

1 个答案:

答案 0 :(得分:3)

(请注意,我在下面更改了结束标记。如果省略,会导致令人头疼的事。)

看起来您需要做的就是为自定义类添加ID:

<com id="myCustomClass">
    </com:MyAS3DocClass>

然后,您只需将该值作为脚本标记内的变量名称进行访问:

        public function call_from_outside():void
        {
            myCustomClass.hitme();
            //other stuff
        }

和这里为什么!

为MXML文件中的标记分配ID时,与将public var <your-variable-name-here>:<tag-class>添加到AS文件中的情况相同(当然这是由编译器完成的,所以您不需要关心) 。为MyAS3DocClass分配ID后,它立即成为可公开访问的变量。一旦它是一个可公开访问的变量,它就可以用在公共,受保护,内部,命名空间和私有函数中!

如果您不喜欢这个想法并且您的自定义类是DisplayObject,您也可以这样做:

<com:MyAS3DocClass name="myCustomClass" />

然后,在脚本标签中:

        public function call_from_outside():void
        {
            MyAS3DocClass(getChildByName("myCustomClass")).hitme();
            //other stuff
        }