在flex中实现可重用组件

时间:2012-12-15 19:00:44

标签: flex actionscript

我正在尝试在flex 3中实现可重用的组件。我有一个动态的tab导航器。在屏幕上我有一个带有点击操作的按钮,一个带有vbox的标签导航器作为子项将被创建,而在vbox中我有一个文本框它从用户那里获取输入信息。

点击按钮旁边有一个显示按钮。当用户单击“显示”按钮并且如果打开了四个选项卡时,我们需要将VBox的所有文本框放到文本区域。

这是我的代码。

 <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">


    <mx:Script>
        <![CDATA[
            import Repeat;
    private var input:String;

    private var i:int=0;
            private function addNextTab(event:Event):void {
                tabs.addChild(new Repeat("Tab"));
            }
            private function show()
            {

                var child:DisplayObject;

            for(i=0;i<tabs.numChildren;i++)
            {


      child=tabs.getChildAt(i);
              input=TextInput(child.getChildAt(0)).text;//error
              textArea.text=textArea.text+input;
            }
            }
        ]]>
    </mx:Script>
    <mx:TabNavigator id="tabs" width="100%" height="100%">

    </mx:TabNavigator>

        <mx:TextArea id="textArea"/>
    <mx:Button label="Add Next Tab" click="addNextTab(event)" />
    <mx:Button label="Show Values" click="show()" />

    </mx:Application>

一行显示错误。我是flex的初学者。但我试着学习并做自己的事。 这是我的Repeat.as

package {
import mx.containers.VBox;
import mx.controls.Label;
import mx.controls.TextInput;

public class Repeat extends VBox {
    public function Repeat(name:String) {
        label = name;


    }

    override protected function createChildren():void {
        super.createChildren();

        var box:VBox = new VBox();
        var t1:TextInput = new TextInput();

        box.addChild(t1);

        addChild(box);
    }
}
}

我必须访问所有标签的文本框信息并将其放在textArea中。

任何人都可以帮助我。?

BTW:这是flex 3应用程序。

1 个答案:

答案 0 :(得分:1)

您应该将文本设为公共属性,而不是创建嵌套的VBox来添加它。你已经扩展了VBox,所以只需addChild ..就像这样:

package {
    import mx.containers.VBox;
    import mx.controls.Label;
    import mx.controls.TextInput;

    public class Repeat extends VBox {

        public var text:TextInput;

        public function Repeat(name:String) {
            label = name;
        }

        override protected function createChildren():void {
            super.createChildren();
            text = new TextInput();
            addChild(text);
        }
    }
}

编辑:显示访问它。

child = tabs.getChildAt(i) as Repeat;
child.text.text = someNewValue;