Apache flex 动态灵活表单复制

Apache flex 动态灵活表单复制,apache-flex,forms,Apache Flex,Forms,我正在设计一个数据输入应用程序,允许对其主题进行多个输入。例如,一个人可能从多个机构接受教育。每个教育条目都是一个表单,应用程序用户可以单击按钮添加另一个条目,这是一个空白但相同的表单 我认为它涉及到状态和自定义表单组件,但不确定所有内容如何组合在一起。有人能告诉我们如何做到这一点吗?一些示例代码将不胜感激 提前感谢,如果有要求,是否需要flex版本?或者只是使用最新的Flex 4代码?一般来说,在Flex中这是一项非常简单的任务,您可以在AnEntry.MXML的MXML中创建一个类定义,它只

我正在设计一个数据输入应用程序,允许对其主题进行多个输入。例如,一个人可能从多个机构接受教育。每个教育条目都是一个表单,应用程序用户可以单击按钮添加另一个条目,这是一个空白但相同的表单

我认为它涉及到状态和自定义表单组件,但不确定所有内容如何组合在一起。有人能告诉我们如何做到这一点吗?一些示例代码将不胜感激


提前感谢,

如果有要求,是否需要flex版本?或者只是使用最新的Flex 4代码?一般来说,在Flex中这是一项非常简单的任务,您可以在AnEntry.MXML的MXML中创建一个类定义,它只是一个TextInput或一个标签和TextInput,或者是每个条目所需的任何内容。在Flex 3中的按钮点击处理程序中调用this.addChildnew AnEntry,或在Flex 4中调用this.addlementnew AnEntry;。要提交,您需要执行一个从0开始到this.numChildren的循环,并将每个TextInput作为参数传递给HTTPService

下面两个文件是根据Flex 3.4编译的

[AnEntry.mxml]

<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Label text="Link:"/>
    <mx:TextInput id="theTextInput"/>
</mx:Box>
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <mx:Label text="Link:"/>
    <mx:TextInput id="theTextInput"/>
</mx:Box>
[MainApplication.mxml]

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

    <mx:Script>
        <![CDATA[
            import mx.rpc.http.HTTPService;
            protected function button1_clickHandler(event:MouseEvent):void
            {
                var params:Object = {};
                var paramCount:Number=0;
                // TODO Auto-generated method stub
                for(var i:Number = 0; i<numChildren; i++)
                {
                    var currentChild:DisplayObject = getChildAt(i);
                    if(currentChild is  AnEntry)
                    {
                        params[paramCount++] = (currentChild as AnEntry).theTextInput.text;
                    }
                }
                var httpService:HTTPService = new HTTPService();
                httpService.method = "POST"
                httpService.url = "http://www.shaunhusain.com/somewhere.php";
                httpService.send(params);
            }
        ]]>
    </mx:Script>


    <mx:Button label="Add Entry" click="this.addChild(new AnEntry())"/>
    <mx:Button label="Submit Info" click="button1_clickHandler(event)"/>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
        import mx.rpc.http.HTTPService;
        protected function button1_clickHandler(event:MouseEvent):void
        {
        var params:Object = {};
        var paramCount:Number=0;
        // TODO Auto-generated method stub
        for(var i:Number = 0; i<numChildren; i++)
        {
        var currentChild:DisplayObject = getChildAt(i);
        if(currentChild is  AnEntry)
        {
        params[paramCount++] = (currentChild as AnEntry).theTextInput.text;
        }
        }
        var httpService:HTTPService = new HTTPService();
        httpService.method = "POST"
        httpService.url = "http://www.shaunhusain.com/somewhere.php";
        httpService.send(params);
        }
        ]]>
    </fx:Script>


    <mx:Button label="Add Entry" click="this.addElement(new AnEntry())"/>
    <mx:Button label="Submit Info" click="button1_clickHandler(event)"/>

</s:Application>
请让我知道这是否让你走上了正确的方向,如果你是Flex搜索的初学者,在一周的视频中,他们是一个伟大的教程,让你开始Flex开发

Flex 4的修正案:

[MainApplication.mxml]

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

    <mx:Script>
        <![CDATA[
            import mx.rpc.http.HTTPService;
            protected function button1_clickHandler(event:MouseEvent):void
            {
                var params:Object = {};
                var paramCount:Number=0;
                // TODO Auto-generated method stub
                for(var i:Number = 0; i<numChildren; i++)
                {
                    var currentChild:DisplayObject = getChildAt(i);
                    if(currentChild is  AnEntry)
                    {
                        params[paramCount++] = (currentChild as AnEntry).theTextInput.text;
                    }
                }
                var httpService:HTTPService = new HTTPService();
                httpService.method = "POST"
                httpService.url = "http://www.shaunhusain.com/somewhere.php";
                httpService.send(params);
            }
        ]]>
    </mx:Script>


    <mx:Button label="Add Entry" click="this.addChild(new AnEntry())"/>
    <mx:Button label="Submit Info" click="button1_clickHandler(event)"/>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
        import mx.rpc.http.HTTPService;
        protected function button1_clickHandler(event:MouseEvent):void
        {
        var params:Object = {};
        var paramCount:Number=0;
        // TODO Auto-generated method stub
        for(var i:Number = 0; i<numChildren; i++)
        {
        var currentChild:DisplayObject = getChildAt(i);
        if(currentChild is  AnEntry)
        {
        params[paramCount++] = (currentChild as AnEntry).theTextInput.text;
        }
        }
        var httpService:HTTPService = new HTTPService();
        httpService.method = "POST"
        httpService.url = "http://www.shaunhusain.com/somewhere.php";
        httpService.send(params);
        }
        ]]>
    </fx:Script>


    <mx:Button label="Add Entry" click="this.addElement(new AnEntry())"/>
    <mx:Button label="Submit Info" click="button1_clickHandler(event)"/>

</s:Application>
[AnEntry.mxml]

<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Label text="Link:"/>
    <mx:TextInput id="theTextInput"/>
</mx:Box>
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <mx:Label text="Link:"/>
    <mx:TextInput id="theTextInput"/>
</mx:Box>

我想我把事情复杂化了。不管怎么说,你的代码肯定给我指明了正确的方向。我在Flex4中运行了您的代码,并做了一些小的修改以反映Spark,但它并没有像预期的那样向容器中添加可视元素。我错过什么了吗?再次感谢您分享智慧。应该也适用于Flex 4,我想您只需要将addChild更改为addElement,我将在这里尝试一下。编辑后包含一个可以根据Flex 4.0编译的版本,如果您仍然有问题,请告诉我,我会看看是否能提供帮助。在第一次试驾中,我确实将addChild更改为addElement。在调试期间,我可以看到在添加新元素时,元素的数量得到了更新,但是新元素不能正确显示。我怀疑它与容器有关…我在我的组件中做了一些愚蠢的事情。无论如何,非常感谢shaunhusain