1

我有一个库项目:里面MovieClip有一个ComboBox组件。该项目具有分配给它的类,myMC

我想要实现的是来自主要电影的调用如下var mmc:myMC = new myMC( stage);

  1. 初始化ComboBox实例的值;
  2. 将 myMC 实例放在舞台上(或在另一个 MC 内)。

所以在 myMC Constructor 里面我写了这样的东西:

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);
}

cbox是 myMC 中 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 和一个文本字段,并附有以下类代码:

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