`
牧羊人
  • 浏览: 215552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mxml中动态生成组件

    博客分类:
  • flex
阅读更多
客户那边的API 返回值如下

<list>

  <com.allmerica.imagepro.to.AttributeTO>

    <name>INDEX1</name>

    <label>RUSH</label>

    <mandatory>Y</mandatory>

    <type>DROPDOWN</type>

    <format>NONE</format>

    <order>1</order>

    <busType></busType>

    <size>10</size>

    <maxLength>0</maxLength>

    <varId>1</varId>

  </com.allmerica.imagepro.to.AttributeTO>

  <com.allmerica.imagepro.to.AttributeTO>

    <name>INDEX2</name>

    <label>Policy_Sym_Num_Mod</label>

    <mandatory>Y</mandatory>

    <type>TEXTBOX</type>

    <format>NONE</format>

    <order>2</order>

    <busType>P</busType>

    <size>10</size>

    <maxLength>12</maxLength>

    <varId>2</varId>

  </com.allmerica.imagepro.to.AttributeTO>

.....

</list>

  public function genLabel(text:String):Label{
       var label:Label=new Label();
       label.text=text;  
       label.visible=true;
       label.height=20;
       return label;
   }
   public function genDateField(idname:String,val:String=null):DateField{
       var dateField:DateField=new DateField();
       dateField.editable=false;
       dateField.height=20;
       dateField.id=idname;      
       if(val!=null)  dateField.text=val;   
       return dateField;
  }
  public function genCombox(idname:String,ac:ArrayCollection,index:int=-1):ComboBox{
       var c:ComboBox=new ComboBox();    
       c.id=idname;
       c.visible=true;
       c.height=20;
      c.labelField="name";
      c.dataProvider=ac;
      if(index!=-1)   c.selectedIndex=index;
      return c;
    }
  public function genValidator(component:DisplayObject,str:String,msg:String):RegExpValidator{  
       var validator:RegExpValidator= new RegExpValidator();
       validator.property = "text";
       validator.source = component;
       validator.expression = str;
       validator.noMatchError = msg;
       validator.required = false;  
       return validator;
  }

     //model中的校验规则

      public var validateRule:Object={  
         INDEX5:['[0-9]{7}','AGENT CODE entered is invalid. OK.'],
         INDEX8:['[A-Za-z]{2}','UW Initials entered is invalid. OK'],
         INDEX10:['[0-9]{10}','Customer Number entered is invalid. OK'],
         symbol:['[A-Z]{3}','Field requires a 3 alpha policy symbol. OK'],
         number:['[0-9]{7}','Field requires a 7 digit policy number. OK'],
         mod:['[0-9]{2}','Field requires a 2 digit policy module. OK']
      };
     public function genTextField(idname:String,len:int=0,val:String=null):TextInput{
       var t:TextInput=new TextInput();    
       t.id=idname;
       t.visible=true;
       t.height=20;
       if(len!=0)      t.width=len*12;
       if(val!=null)     t.text=val;

     //校验   
    var rule:Object=MiscModelLocator.getInstance().validateRule;
    if(rule.hasOwnProperty(idname)){
    var validator:RegExpValidator=genValidator(t,rule[idname][0],rule[idname][1]);
    MiscModelLocator.getInstance().validator.push(validator);
    }
    return t;
  }

//policy 为初始值
  public function genPolicy(policy:String):HBox{
    var componet:DisplayObject;
    var componet1:DisplayObject;
    var componet2:DisplayObject;
    if(policy!=null){
        componet=genTextField("symbol",3,policy.substr(0,3));
        componet1=genTextField("number",7,policy.substr(3,7));
       componet2=genTextField("mod",2,policy.substr(10,2));
    }else{
       componet=genTextField("symbol",3);
       componet1=genTextField("number",7);
       componet2=genTextField("mod",2);
   }    
   var hbox:HBox=new HBox();    
   hbox.addChild(componet);
   hbox.addChild(componet1);    
   hbox.addChild(componet2);
   return hbox;
   }

     //遍历ArrayCollection中的输入框默认值

     private function findAC(ac:ArrayCollection,val:String):String{
         if(ac==null ||val==null)      return null;

         for each(var obj:Object in ac){
            if(obj["name"]==val)       return obj["desc"];
         }
         return null;
      }

     //遍历ArrayCollection中的ComboBox的selectedIndex
   private function findTwoAC(val:String,ac:ArrayCollection,ac1:ArrayCollection):int{
       if(ac==null||val==null||ac1==null)       return -1;
       for each(var obj:Object in ac){
          if(obj["name"]==val){
               for(var i:int=0;i<ac1.length;i++){
                   if(obj["desc"]==ac1[i]["name"])        return i;
               }
           }
       }      
        return -1;
   }
      public function addBox(boxLeft:VBox,boxRight:VBox,obj:Object,obj1:Object,ac:ArrayCollection=null):void{
         var label:Label;
         var componet:DisplayObject;  
         label=genLabel(obj["label"]);
         boxLeft.addChild(label);               
       if(obj["type"]=="TEXTBOX"){          //TEXTINPUT类型
               if(obj["label"]=="Policy_Sym_Num_Mod"){
               var policy:String=findAC(ac,obj["name"])          
               var hbox:HBox=genPolicy(policy);
               boxRight.addChild(hbox);
         }else if(obj["label"].toString().indexOf("_Date")!=-1){         //日期类型
            var dateField:DateField=genDateField(obj["name"],findAC(ac,obj["name"]));
            boxRight.addChild(dateField);
        }else{    
           componet=genTextField(obj["name"],15,findAC(ac,obj["name"]));
           boxRight.addChild(componet);
        }
      }else if(obj["type"]=="DROPDOWN"){          //ComboBox类型
        componet=genCombox(obj["name"],obj1[obj["label"]],findTwoAC(obj["name"],ac,obj1[obj["label"]]));
        boxRight.addChild(componet);
     }else{         //其他类型
       XAlert.info(obj["type"]);
     }  
   }//end function


      public function pushIdName(model:Array,arr:Array):void{
               var policy:String="";  
              for(var i:int=0;i<arr.length;i++){   
                  var component:DisplayObject=arr[i] as DisplayObject;
                  var val:String;
                   var id:String=component["id"];   
                   if(id!=null && id.indexOf("INDEX")!=-1){  
                      if(component.hasOwnProperty("selectedItem")){
                          val=String(component["selectedItem"]["id"]);
                          if(val=="-1"){
                          val="";
                          }    
                     }else{
                         val=component["text"];   
                     }
                    if(val!=null && val!=""){
                       var vo:IdNameVo=new IdNameVo();            
                        vo.name=component["id"];
                       vo.desc=val;
                       model.push(vo);     
                   }
             }else{
                  var hbox:HBox=component as HBox;
                   for each(var com:DisplayObject in hbox.getChildren()){          
                     if(com["text"]=="")policy+="%";
                     else policy+=com["text"];
                 }         
            }  
          }//end for
   if(policy!="" && policy!="%%%"){
        var vo1:IdNameVo=new IdNameVo();
        vo1.id=822;
        vo1.name="INDEX2";
        vo1.desc=policy;
        model.push(vo1);
   }        
  }//end function


 
  public function resetToBlank(children:Array):void{     
       if(children.length>0){
            for(var i:int=0;i<children.length;i++){
                if(children[i] is Container){        //for example HBox
                    var container:Container=children[i] as Container;
                    if(container.getChildren().length>0){                          //递归     
                       resetToBlank(container.getChildren());
                    }
               }else{
                var component:DisplayObject=children[i] as DisplayObject;
                var componentInfo:Object = ObjectUtil.getClassInfo(component);
                if(componentInfo.name == "mx.controls::ComboBox"){
                    component["selectedIndex"]=0;   
                }else if(componentInfo.name == "mx.controls::TextInput" || componentInfo.name == "mx.controls::DateField"){
                   if(component.hasOwnProperty("text"))component["text"]="";  
                }
           }
        }//end for
      }//end if
    }
   
    public function whichBox(arr:Array,obj:Object,len:int,obj1:Object,ac:ArrayCollection):void{
        var boxLeft1:VBox =arr[0] as VBox;
        var boxRight1:VBox =arr[1] as VBox;
        var boxLeft2:VBox =arr[2] as VBox;
        var boxRight2:VBox =arr[3] as VBox;
        if(obj["order"]<=len){
           CommonFun.getInstance().addBox(boxLeft1,boxRight1,obj,obj1,ac);
       }else{
           CommonFun.getInstance().addBox(boxLeft2,boxRight2,obj,obj1,ac);
       }
  }


     public function boxView(arr:Array,obj:Object):void{     
          var attrLeft1:VBox =arr[0] as VBox;                 //左边的label
          var attrRight1:VBox =arr[1] as VBox;               //左边的控件

          var attrLeft2:VBox =arr[2] as VBox;                 //右边的label
          var attrRight2:VBox =arr[3] as VBox;              // 右边的控件

      try{

          //先删除
          attrLeft1.removeAllChildren();
          attrRight1.removeAllChildren();
          attrLeft2.removeAllChildren();
          attrRight2.removeAllChildren();
          var ac:ArrayCollection = new ArrayCollection();   
          if(obj.hasOwnProperty("to"))    ac.source =  obj["to"]["attribValues"] ;
          else    ac=null;
         for each(var obj1:Object in obj["list"]){
              whichBox(arr,obj1,8,obj,ac);                                 
          }
     } catch(e:Error){
      XAlert.error("GetDocAttributes.boxView:"+e.message);
    }
}

注意的问题:

1 <mx:VBox></mx:VBox> 为空时设置高度,因为没有设置高度,动态添加的组件不显示

2 getChildren,childDescriptors的区别

childDescriptors 特指嵌入的mxml子组件

getChildren指所有的子组件
  • 大小: 55.3 KB
分享到:
评论

相关推荐

    非可视化组件(类)写的mxml中

    这篇博客文章“非可视化组件(类)写的mxml中”探讨了如何在MXML上下文中使用非图形化组件,从而实现更复杂的功能。 首先,让我们理解什么是非可视化组件。在Flex中,可视化组件通常是那些在用户界面上可见的元素,...

    关于Flex4不生成mxml对应的html文件的解决方法

    在使用Flex 4进行开发时,有时会遇到MXML文件在编译时未生成对应的SWF文件和HTML包裹文件的情况,这可能导致应用无法在浏览器中正常运行。针对这个问题,我们可以采取一些解决步骤来修复。 首先,确保你的开发环境...

    Flex动态生成checkbox组

    在Flex编程中,动态生成组件是一项常见的需求,特别是在创建用户界面时,可能需要根据后端数据自动生成元素,如复选框(Checkbox)组。"Flex动态生成checkbox组"这个主题,就是关于如何在Flex应用中利用代码动态创建...

    Flex中如何动态生成DataGrid以及动态生成表头

    以下是一个关于如何在Flex中动态生成DataGrid及其表头的详细说明。 首先,我们需要了解基本的Flex组件和MXML语法。`&lt;mx:Application&gt;` 是Flex应用程序的基本容器,而`&lt;mx:Script&gt;` 用于放置ActionScript代码。`...

    flex动态生成datagrid表头

    在Flex开发中,数据网格(DataGrid)是一种常用的组件,用于显示...总的来说,通过学习Flex中的动态生成DataGrid表头和LineChart的简单操作,开发者可以更好地理解和应用Flex组件,实现更丰富的用户界面和数据可视化。

    MXML 基本语法和ActionScript 类的标签使用

    在编译过程中,Flex会解析MXML代码并生成SWF文件,其中包含了对应的ActionScript对象。 **MXML基本语法** - MXML标签通常代表ActionScript 3.0中的类或者类的属性。 - Flex框架负责解析这些标签,将它们转换为运行...

    mxml-3.2_cXX9668_xml_

    2. **XML序列化**:将内存中的XML对象写回磁盘,生成XML文件。这个过程涉及到将元素、属性、文本等转换为有效的XML格式。 3. **DOM(Document Object Model)模型**:Mini-XML库提供了一个简单的DOM模型,允许开发者...

    Flex的组件

    - 动态创建:在某些情况下,`Menu`组件可能需要根据运行时的数据动态生成菜单项。 4. 源码解析 `Menu.mxml`作为一个源码文件,很可能包含自定义组件的逻辑。开发者可以通过阅读源码了解如何扩展Flex的基础组件,...

    Flex3控制多个SWF文件在MXML文件里做360度的随机运动

    标题中的“Flex3控制多个SWF文件在MXML文件里做360度的随机运动”涉及了几个关键的Flex编程概念,主要包括Flex框架、MXML语言、SWF加载以及动态运动控制。以下是对这些知识点的详细解释: 1. **Flex框架**:Flex是...

    flex xml生成tree 源码

    描述:此代码示例展示了如何在Flex应用程序中使用XML数据来动态生成一个树形结构(Tree)。Flex是Adobe Systems开发的一款开源框架,用于构建跨平台的桌面和移动设备应用。这段代码通过HTTPService组件从外部XML文件...

    flex组件LIST使用

    在示例代码中,我们看到`&lt;fx:Script&gt;`标签被用来包含AS3代码,这使得开发者能够在MXML组件中直接嵌入脚本,实现更复杂的功能。 #### 知识点二:ArrayCollection的使用 在Flex中,`ArrayCollection`是用于管理列表...

    Flex样式生成工具

    Flex框架采用MXML和ActionScript作为主要的编程语言,MXML用于定义界面布局和组件,而ActionScript则用于处理业务逻辑和交互。在Flex应用中,样式通常通过CSS来定义,包括颜色、字体、大小、边距等视觉元素。然而,...

    flex图形组件

    3. 与MySQL数据库交互:在Flex应用中,可以使用AMF(Action Message Format)或Web服务接口,使Flex与Java后端(如使用MySQL数据库)进行通信,获取和更新数据,然后在GDiagram或Flex图形组件中展示。 四、Java通信...

    flex样式代码生成器

    Flex样式代码生成器允许用户通过直观的界面调整各种样式属性,如颜色、字体、大小、边距、填充等,然后自动生成对应的MXML或CSS代码,方便复制到项目中。 此工具的使用方法通常是这样的: 1. 打开Flex样式代码生成...

    动态可编辑的DataGrid

    动态DataGrid允许我们在运行时根据需求动态地生成列和行,这意味着我们可以在程序执行过程中根据服务器返回的数据结构来构建Grid。这为开发者提供了极大的灵活性,使得用户界面能够更好地适应后台数据的变化。 `...

    表格单元格自定义ToolTip组件

    在标准的DataGrid组件中,ToolTip通常默认为简单的文字提示,但往往无法满足复杂的业务需求或设计要求。自定义ToolTip组件则可以打破这些限制,允许开发者自定义提示内容、样式、位置、动画效果等,从而提升用户体验...

    flex生成图片并保存

    1. **SaveChart.mxml** - 这个文件很可能包含了一个使用Flex的图表组件(如mx:PieChart或mx:LineChart)生成图表的示例,并将其保存为图片。在Flex中,我们可以利用Chart的`copyToBitmap`方法将图表转换为BitmapData...

    Flex 动态画直线

    描述中提到了封装代码,这意味着可能有一个自定义组件(如`LineSkin.mxml`),这个组件扩展了Flex的基础显示对象(如`Sprite`或`Shape`),并在其内部实现了画线的功能。组件可以接收四个坐标点作为参数,然后自动...

    PHP+XML生成家谱树

    在这个实例中,我们将通过PHP处理XML文件来动态生成家谱树。 首先,我们需要理解XML(Extensible Markup Language)的作用。XML是一种用于标记数据的语言,它允许我们以结构化的方式存储和传输信息。在我们的家谱树...

Global site tag (gtag.js) - Google Analytics