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

ちゃんと理解しているなら、はい、これは可能です。「コンポーネントを呼び出す」という用語は標準的ではありません。しかし、MXML ではなく ActionScript でコンポーネントを作成したいと考えています。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);
}

読んでおくべきことの 1 つは、Flex コンポーネントの LifeCycleです。すべての Flex コンポーネントが通過します。そして特定のことは、特定の目的のために特定の順序で行われます。子を作成するには、createChildren() を拡張したほうがよい場合があります。特に、アプリケーション タグの初期設定の一部としてコンポーネントを作成する場合はそうです。

于 2013-02-21T03:23:12.063 に答える
1

宣言的な実装ではなくプログラムでコンポーネントをインスタンス化するには、 を使用addElement()してコンポーネントを表示リストに追加します。

たとえば、という名前の Spark グループにビジュアル要素を追加するには、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 である、つまりスプライトに拡張されていると仮定すると、次のようにすることができます

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 に答える