【问题标题】:Implementing reusable components in flex在 flex 中实现可重用组件
【发布时间】:2012-12-15 19:00:43
【问题描述】:

我正在尝试在 flex 3 中实现可重用的组件。我有一个动态的选项卡导航器。在屏幕上,我有一个带有单击操作的按钮,一个带有 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 中。

任何人都可以帮助我吗?

顺便说一句:这是 flex 3 应用程序。

【问题讨论】:

    标签: apache-flex actionscript


    【解决方案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;
    

    【讨论】:

    • 这是说访问未定义属性子的错误..也就是说,当我们将文本作为公共变量时,它会对可重用性产生任何影响..如果你看到我的程序它正在生成相同组件一次又一次,当用户单击显示按钮时,它会迭代地将所有可重用的组件文本值添加到 textArea..
    • 它将完全按照您的意愿工作。错误是因为您设置了这个 - var child:DisplayObject;然后使用我给你的代码 child = tabs.getChildAt(i) 作为重复;你需要设置这个: var child:Repeat;
    • 可重用性是正确的。每次调用 new Repeat("Tab") 都会创建一个单独的 Repeat 对象,其 OWN TextInput 称为 text。这就是为什么每个 Button 都有一个标签。一个带有公共 var 标签的 Button 类(不完全相同,但相同点)...尽可能多的新 Button()s。 :)
    • 实际上我有表单收集的主要目标(有 4 个用户输入的文本框和 4 个选项卡,所以 16 个值,我需要将所有 16 个值的信息获取到另一个屏幕......所以我尝试了这个作为示例..它工作正常..所以我可以转发我的工作..你能对我的主要目标提出任何建议吗......我仍然必须对我的目标进行一些其他改进..如果你这样做不介意请留意这个页面..我会自己工作..我只会问我是否真的打了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 2023-01-29
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多