1

ライブラリ アイテムがあります。内部MovieClipに 1 つのコンポーネントがあります。ComboBoxアイテムにはクラスが割り当てられていmyMCます。

私が達成したいのは、メインムービーからの呼び出しが次のようvar mmc:myMC = new myMC( stage);になることです:

  1. ComboBoxインスタンスの値を初期化します。
  2. myMC インスタンスをステージ上 (または別の MC 内) に配置します。

したがって、myMC コンストラクター内で次のように書きました。

public function myMc( theStage:flash.display.Stage) {
    if( stage == null) this.addEventListener( Event.ADDED_TO_STAGE, init);
    theStage.addChild( this);
}

public function init( e:Event = null) {
    var Data:Array= new Array(
        {'label1' : 'item1'},
        {'label2' : 'item2'},
        {'label3' : 'item3'}
    );
    cbox.dataProvider = new DataProvider( Data);
}

cboxmyMC 内の ComboBox インスタンスの名前です。

何が起こるかというと、ComboBox に値が割り当てられていないということです。これは私の問題の単純化された例ですが、実際のケースにはより多くの UI コンポーネントが含まれており、すべてのコンポーネントで値が失われています。

デバッガーは正しいタイプのコンポーネント オブジェクトを値とともに表示しますが、表示されているステージ オブジェクトからは外れています。

説明してください、私は何を間違っているのですか - ステージ上のインスタンスが AS インスタンス化されたオブジェクトと異なるのはなぜですか?

4

1 に答える 1

0

わかりました、それは私の間違いだったようです: 間違った型と乱雑なコードです。

これは、結局うまくいく例です。そのため、独自のコンストラクターによってオブジェクトをステージに配置するのはベスト プラクティスではないかもしれませんが、これは機能します。作業例のソース.

メイン ドキュメントにはクラス DocTest があります。

package  {
    import flash.display.Sprite;
    import libItem;
    public class DocTest extends Sprite {
        public function DocTest() {
            var instance:libItem = new libItem( this);
        }
    }
}

また、ライブラリ アイテムには、内部に ComboBox とテキスト フィールドがあり、次の Class コードが添付されています。

    package  {
    import fl.data.DataProvider;
    import flash.display.Sprite;
    import flash.events.Event;

    public class libItem extends Sprite{

        public function libItem( theParent:flash.display.Sprite) {
            if( stage == null) this.addEventListener( Event.ADDED_TO_STAGE, init);
            else init();
            theParent.addChild( this);
        }

        public function init( e:Event = null) {
            var Data:Array= new Array(
                {label:'label1', data: 'item1'},
                {label:'label2', data: 'item2'},
                {label:'label3', data: 'item3'}
            );
            cbox.dataProvider = new DataProvider( Data);
            x = 200;
            y = 100;
            myText.text = 'Woo-hoo!';
        }
    }
}

これが誰かに役立つことを願っています。勉強の質問ですみません。

于 2012-05-16T08:31:37.403 に答える