【问题标题】:How to assign properties of a component inside an MC loaded from a Library?如何在从库加载的 MC 中分配组件的属性?
【发布时间】:2012-05-16 04:32:59
【问题描述】:

我有一个库项目:MovieClip,里面有一个 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);
}

cbox 是 myMC 中 ComboBox 实例的名称。

发生的情况是 ComboBox 没有分配任何值。这是我的问题的一个简化示例,而实际案例涉及更多的 UI 组件——它们都错过了它们的值。

调试器显示正确类型的组件对象和值 - 但它们从显示的阶段对象中丢失!

请解释一下,我做错了什么 - 为什么舞台上的实例与 AS 实例化的对象有所不同?

【问题讨论】:

  • "myMC" 不是最佳类名,也不是将 Stage 传递给构造函数。您应该实施更好的编码约定和面向对象的标准。
  • "myMC" 仅用于示例。我为我的类使用包和合理的树结构。在一个或另一个父容器中实例化我的组件的更好方法是什么?
  • 您喜欢在哪里分配财产?加载 SWF 或加载 swf 本身的主要应用程序?
  • 它不是加载的外部 swf — 单个 fla 及其符号库 + 一堆 .as 类。
  • 看来这是我错误的类型定义。现在有一个这个孤立案例的工作示例。请参阅我自己对问题的回答。

标签: actionscript-3 oop flash-cs5


【解决方案1】:

好吧,看来这是我的错误:错误的类型和混乱的代码。

毕竟这是一个有效的例子。因此,通过自己的构造函数将对象放在舞台上可能不是最佳实践,但是这是可行的。 working example sources

主文档有一个类 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!';
        }
    }
}

希望这对某人有所帮助。抱歉,这个问题很聪明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2016-03-11
    • 2020-12-22
    相关资源
    最近更新 更多