2010-06-08 69 views
0

我希望有人可以幫助我.....ArrayCollection通過匹配項目循環

我想建立一個問卷模塊的動態表單。建立一些以前的帖子我使用的過程類似於有問題的「How to generate a form(<mx:form>) dynamically in flex?」我已經設法證明了擴展XML以包括日曆,組合框等事實。

我的問題是,現在需要獲取來自ArrayCollection的數據而不是來自xml文件。我期待循環通過交流和類型=「文本」呈現textinput字段,其中類型=「日曆」呈現日曆等等

我的代碼到目前爲止只是看着一個textinput字段(和對不起所有的評論包括)是: -

[Bindable] 
    public var AC:ArrayCollection = new ArrayCollection([ 
    {type:'text', direction:'horizontal', tooltip:'test tooltip', label:'my textbox label', id:'1'}, 
      {type:'text', direction:'horizontal', tooltip:'another tooltip', label:'another label', id:'2'} 
    ]); 



    private function init():void 

    {  
     var form:Form = new Form(); 

      for each(var elements:String in AC) 

    { 
          switch([email protected]()) 
          { 
            case "text": 

        var fi:FormItem = new FormItem(); 
         // fi.toolTip = elements.tooltip.toString(); 
              // fi.required = getglobalprofile.required.toString(); 
              // fi.direction = getglobalprofileb[i][email protected]; 

         var li:Label = new Label(); 
              // li.text = getglobalprofileb[i][email protected]; 
              // li.width = 100; 

         var ti:TextInput = new TextInput(); 
              ti.text = "test"; 
             ti.width = 200; 

         form.addChild(fi); 
         fi.addChild(li); 
         fi.addChild(ti); 

      //   break; 
          } 
      }  

        this.addChild(form); 
      } 

]]> 
    </mx:Script> 

<!-- Data grid added just to check that AC getting data--> 

<mx:DataGrid id="profile" selectedIndex="1" dataProvider="{AC}" width="100%" height="50%" /> 

    <mx:Form id="form" name="form"> 

    </mx:Form> 

,如果您有興趣使用XML版本(只用於呈現)讓我知道,我將在此以及

+0

我不太明白你的問題。 foreach循環有問題嗎?什麼具體不工作? – 2010-06-09 03:54:58

+0

是的,它是每個循環。我期待在AC中找到列'type'=「text」並執行一些操作,然後查看列'type'=「calendar」並執行一些不同的操作等。 – charlie 2010-06-09 07:54:25

回答

0

我已經找到了答案,這個問題的第一部分是通過一個簡單的請求使用RO調用來獲取表單。

下一個問題是如何獲得的形式保存時,我並不「知道」現場ID,有多少或什麼類型的字段它是.........

另一個帖子methinks!

希望這對某人有用。

[Bindable] public var getglobalprofileb:ArrayCollection; 

    public function init(event:ResultEvent):void { 
       getglobalprofileb = event.result as ArrayCollection; 

     var form:Form = new Form(); 

      for each(var elements:Object in getglobalprofileb) 

      { 
        switch(elements.type.toString()) 
          { 
           case "text": 

              var fi:FormItem = new FormItem(); 
              fi.toolTip = elements.tooltip.toString(); 
              fi.required = elements.required; 
              fi.direction = elements.direction; 

              var li:Label = new Label(); 
              li.text = elements.label; 
              li.width = 100; 

              var ti:TextInput = new TextInput(); 
              ti.text = elements.default_text.toString(); 
              ti.width = 200; 
              ti.id = elements.id; 

              form.addChild(fi); 
              fi.addChild(li); 
              fi.addChild(ti); 

               break; 
            case "int": 
            break; 


           case "textarea": 
              var fa:FormItem = new FormItem(); 
              fa.toolTip = elements.tooltip; 
              fa.required = elements.required; 
              fa.direction = elements.direction; 

              var la:Label = new Label(); 
              la.text = elements.label; 
              la.width = 100; 

              var ta:TextArea = new TextArea(); 
              ta.text = elements.default_text; 
              ta.id = elements.id; 
              ta.width = 200; 
              ta.height = 100; 

              form.addChild(fa); 
              fa.addChild(la); 
              fa.addChild(ta); 

               break; 
            case "int": 
            break; 


            case "DateField": 
              var fdf:FormItem = new FormItem(); 
              fdf.toolTip = elements.tooltip; 
              fdf.required = elements.required; 
              fdf.direction = elements.direction; 

              var ldf:Label = new Label(); 
              ldf.text = elements.label; 
              ldf.width = 100; 

              var tdf:DateField = new DateField(); 
              tdf.formatString="DD/MM/YYYY"; 
              tdf.width = 200; 
              tdf.id = elements.id; 

              form.addChild(fdf); 
              fdf.addChild(ldf); 
              fdf.addChild(tdf); 

               break; 
            case "int": 
            break; 


            case "combobox": 
              var fcb:FormItem = new FormItem(); 
              fcb.toolTip = elements.tooltip; 
              fcb.required = elements.required; 
              fcb.direction = elements.direction; 

              var lcb:Label = new Label(); 
              lcb.text = elements.label; 
              lcb.width = 100; 

              var tcb:combobox = new ComboBox(); 
              tcb.id = elements.id; 
              tcb.width = 200; 


              var datas:String = elements.Datas; 
              var arr:ArrayCollection = new ArrayCollection ( 
                  datas.split(",") 
                    ); 

              tcb.dataProvider = arr ; 

              form.addChild(fcb); 
              fcb.addChild(lcb); 
              fcb.addChild(tcb); 

              break; 
            case "int": 
            break; 

            case "HSlider": 
              var fhs:FormItem = new FormItem(); 
              fhs.toolTip = elements.tooltip; 
              fhs.required = elements.required; 
              fhs.direction = elements.direction; 

              var lhs:Label = new Label(); 
              lhs.text = elements.label; 
              lhs.width = 100; 

              var ths:HSlider = new HSlider(); 
              ths.tickInterval = 10; 
              ths.liveDragging = true; 
              ths.snapInterval = 1; 
              ths.width = 200; 
              ths.id = elements.id; 

              form.addChild(fhs); 
              fhs.addChild(lhs); 
              fhs.addChild(ths); 

              break; 
            case "int": 
            break; 


           case "CheckBox": 
              var fchb:FormItem = new FormItem(); 
              fchb.toolTip = elements.tooltip; 
              fchb.required = elements.required; 
              fchb.direction = elements.direction; 

              var lchb:Label = new Label(); 
              lchb.text = elements.label; 
              lchb.width = 100; 

              var tchb:CheckBox = new CheckBox(); 
              tchb.id = elements.id; 

              form.addChild(fchb); 
              fchb.addChild(lchb); 
              fchb.addChild(tchb); 

              break; 
            case "int": 
            break; 


            case "NumericStepper": 
              var fns:FormItem = new FormItem(); 
              fns.toolTip = elements.tooltip; 
              fns.required = elements.required; 
              fns.direction = elements.direction; 

              var lns:Label = new Label(); 
              lns.text = elements.label; 
              lns.width = 100; 

              var tns:NumericStepper = new NumericStepper(); 
              tns.id = elements.id; 

              form.addChild(fns); 
              fns.addChild(lns); 
              fns.addChild(tns); 

              break; 
            case "int": 
            break; 


           case "Richtext": 
              var frte:FormItem = new FormItem(); 
              frte.toolTip = elements.tooltip; 
              frte.required = elements.required; 
              frte.direction = elements.direction; 

              var lrte:Label = new Label(); 
              lrte.text = elements.label; 
              lrte.width = 100; 

              var trte:RichTextEditor = new RichTextEditor(); 
              trte.width = 400; 
              trte.id = elements.id; 


              form.addChild(frte); 
              frte.addChild(lrte); 
              frte.addChild(trte); 

              break; 
            case "int": 
            break; 




          } 
        }  

        this.addChild(form); 
       // form.id = 'demographics'; 


       }