Apache flex 从脚本中调用组件

Apache flex 从脚本中调用组件,apache-flex,custom-component,Apache Flex,Custom Component,我有一个组件,我想从脚本部分调用它 因此,与其像这样得到它: <s:application> <script> </script <ns1:msns includeIn="login" x="482" y="541"> </ns1:msns> </s:application> <s:application> <script> protected function mmshakkoutab(eve

我有一个组件,我想从脚本部分调用它

因此,与其像这样得到它:

<s:application>
<script>
</script

<ns1:msns includeIn="login" x="482" y="541">
    </ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
            {               
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script

</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{               
 var msns:component = new component();
 msns.x = 5
 msns.x = 5
 this.addElement(msns);
}


如果我理解正确,那么是的,这是可能的。您认为“调用组件”的术语是非标准的;但我认为您希望在ActionScript中而不是在MXML中创建组件。使用MXML可以执行的任何操作都可以使用ActionScript执行

你有正确的想法;你几乎一路走来;我只想改变一些事情。首先,在ActionScript中导入类;您不会引用MXML名称空间,概念上是这样的:

<s:application>
<script>
</script

<ns1:msns includeIn="login" x="482" y="541">
    </ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
            {               
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script

</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{               
 var msns:component = new component();
 msns.x = 5
 msns.x = 5
 this.addElement(msns);
}
在脚本块中

创建组件时,需要创建指向该组件的变量。这将对应于MXML中的id字段。
ns1:msns:component的语法可能会导致编译器错误。但是,您可以这样创建组件:

<s:application>
<script>
</script

<ns1:msns includeIn="login" x="482" y="541">
    </ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
            {               
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script

</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{               
 var msns:component = new component();
 msns.x = 5
 msns.x = 5
 this.addElement(msns);
}
我在这里要提到,通常的惯例是将组件名称大写。不过,您使用小写字母在语法上并没有错误

然后设置组件的属性,这是您已经在做的:

msns.x = 5
msns.x = 5
最后——这是您缺少的步骤——您必须将新组件添加到容器中。如果您正在处理Spark容器或MX容器,则可以使用。因为在您提供的父容器示例中是spark应用程序,所以我将使用addElement:

this.addElement(msns);
因此,您的代码块将被重新编写如下:

<s:application>
<script>
</script

<ns1:msns includeIn="login" x="482" y="541">
    </ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
            {               
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script

</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{               
 var msns:component = new component();
 msns.x = 5
 msns.x = 5
 this.addElement(msns);
}

有一件事你应该考虑阅读。每个Flex组件都经过它;某些事情是为了特定的目的按特定的顺序进行的。对于创建子项,您最好扩展createChildren(),尤其是如果您希望在应用程序标记的初始设置中创建组件

要以编程方式实例化组件而不是声明性实现,请使用
addElement()
将组件添加到显示列表中

例如,将可视元素添加到名为
container
的Spark组

<?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"
               creationComplete="creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.core.UIComponent;
            import mx.events.FlexEvent;

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                var component:UIComponent = new UIComponent();
                component.x = 5;
                component.y = 5;

                container.addElement(component);
            }
        ]]>
    </fx:Script>

    <s:Group id="container" />

</s:Application>

如果假设您的组件是ActionScript,即扩展到sprite,您可以这样做

protected function creationCompleteHandler(event:FlexEvent):void
{
    var yourASClassObj:ASClass = new ASClass();

    var component:UIComponent = new UIComponent();
    this.addElement(component);

    component.addChild(yourASClassObj);
}

我必须+1这个,即使我们在同一时间写下了各自的答案。:-)谢谢各位,我明天上班的第一件事就是:D