0

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

所以不要像这样得到它:

<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>

这甚至可能吗?我已经四处搜索,但所有示例都给了我脚本下的组件。

4

3 回答 3

1

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

你有正确的想法;你几乎就在那儿了;只有几件事我会改变。首先,在 ActionScript 中,您将导入该类;你不会引用 MXML 命名空间,概念上是这样的:

import com.myPackage.msns;

在您的脚本块中。

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

var msns :component = new component()

我将在这里提到通常的约定是将组件名称大写。不过,您对小写字母的使用在语法上并没有错。

然后设置组件的属性,你已经在做:

msns.x = 5
msns.x = 5

最后 - 这是您缺少的步骤 - 您必须将新组件添加到容器中。如果您正在处理 Spark 容器,则可以使用addElement来执行此操作;如果您正在处理 MX 容器,则可以使用addChild 。因为,在您提供的示例中,您的父容器是 spark 应用程序,所以我将使用 addElement:

this.addElement(msns);

因此,您的代码块将像这样重写:

protected function mmshakkoutab(event:MouseEvent):void{               
 var msns:component = new component();
 msns.x = 5
 msns.x = 5
 this.addElement(msns);
}

您应该考虑阅读的一件事是Flex Component LifeCycle。每个 Flex 组件都经过它;某些事情是为了某种目的而按某种顺序完成的。对于创建子项,您最好扩展 createChildren(),特别是如果您希望将组件创建为应用程序标签初始设置的一部分。

于 2013-02-21T03:23:12.063 回答
1

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

例如,要将视觉元素添加到名为container.

<?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>

在脚本块中,使用包命名空间而不是 MXML 命名空间。

import com.msns.Component;

var component:Component = new Component();
component.x = 5
于 2013-02-21T03:23:25.570 回答
0

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

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

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

    component.addChild(yourASClassObj);
}
于 2013-02-22T04:46:32.880 回答