Comunidad de diseño web y desarrollo en internet online

Cargar valores a CheckBox con un XML remoto (Flex)

Citar            
MensajeEscrito el 05 May 2008 09:34 pm
Hola colegas del foro, veran estoy intentado cargar de un archivo XML externo que tiene la estructura siguiente:

Código :

<Conceptos>    
    <Concepto id=\"1\" descripcion=\"Primer Concepto\" Lun=\'true\' Mar=\'true\' Mier=\'true\' Jue=\'false\' Vie=\'true\' Sab=\'true\' Dom=\'false\'/>
    <Concepto id=\"2\" descripcion=\"Segundo Concepto\" Lun=\'false\' Mar=\'false\' Mier=\'true\' Jue=\'false\' Vie=\'true\' Sab=\'false\' Dom=\'false\'/>
    <Concepto id=\"3\" descripcion=\"Tercer Concepto\" Lun=\'true\' Mar=\'false\' Mier=\'true\' Jue=\'true\' Vie=\'false\' Sab=\'true\' Dom=\'false\'/>
</Conceptos> 

Donde me he quedado sin poder resolverlo es en la parte de asignarle los valores almacenados en el Xml externo a los checkbox

Código :

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<mx:Application xmlns:mx=\"http://www.adobe.com/2006/mxml\" layout=\"absolute\" creationComplete=\"ConceptoXml.send();\">
<mx:HTTPService id=\"ConceptoXml\" url=\"http://localhost/Conceptos.xml\" resultFormat=\"e4x\" showBusyCursor=\"true\"/>
<mx:Script>
    <![CDATA[
        import mx.controls.CheckBox;                 
    ]]>
</mx:Script>
    <mx:VBox width=\"100%\" 
           height=\"100%\">
        <mx:DataGrid width=\"380\" height=\"210\" dataProvider=\"{ConceptoXml.lastResult.Concepto}\">
            <mx:columns>
                <mx:DataGridColumn headerText=\"Concepto\" dataField=\"@descripcion\" width=\"120\"/>
                <mx:DataGridColumn headerText=\"L\" dataField=\"@Lun\" editorDataField=\"@Lun\" 
                    rendererIsEditor=\"true\"    itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"M\" dataField=\"@Mar\" itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"M\" dataField=\"@Mier\" itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"J\" dataField=\"@Jue\" itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"V\" dataField=\"@Vie\" itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"S\" dataField=\"@Sab\" itemRenderer=\"mx.controls.CheckBox\"/>
                <mx:DataGridColumn headerText=\"D\" dataField=\"@Dom\" itemRenderer=\"mx.controls.CheckBox\"/>
            </mx:columns>
        </mx:DataGrid>
    </mx:VBox>
</mx:Application>


Alguien que pueda ayudarme, le estaría muy agradecido.

P.D.T. El Xml podria modificarlo a otra estructura de ser necesario

Por sergestux

49 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 May 2008 05:39 pm
Pude resolverlo de una manera que no me gusta para nada, pero aca va la solucion donde unicamente pongo el codigo para los dos primeros dias Lunes y Martes:

Código :

            <mx:DataGridColumn headerText="L" dataField="@Lun" rendererIsEditor="true">
            <mx:itemRenderer>
               <mx:Component>
                  <mx:CheckBox creationComplete="init()">
               <mx:Script>
                  <![CDATA[               
                     private var _data:Object;
                     private function init():void
                     {
                        this.addEventListener(MouseEvent.CLICK, update);
                     }
                     [Bindable]
                     override public function get data():Object
                     {
                        return _data;
                     }
                     
                     override public function set data(o:Object):void
                     {
                        _data = o;
                        if(o.@Lun == "true")
                           this.selected = true;
                        else
                           this.selected = false;
                              
                     }
                     private function update(event:MouseEvent):void
                     {
                        if(this.selected)
                        _data.checked = "true";
                        else
                           _data.checked = "false";      
                     }                                        
                  ]]>               
               </mx:Script>
               </mx:CheckBox>
               </mx:Component>
            </mx:itemRenderer>
            </mx:DataGridColumn>            
                        
            <mx:DataGridColumn headerText="M" dataField="@Mar" rendererIsEditor="true">
            <mx:itemRenderer>
               <mx:Component>
                  <mx:CheckBox creationComplete="init()">
               <mx:Script>
                  <![CDATA[               
                     private var _data:Object;
                     private function init():void
                     {
                        this.addEventListener(MouseEvent.CLICK, update);
                     }
                     [Bindable]
                     override public function get data():Object
                     {
                        return _data;
                     }
                     
                     override public function set data(o:Object):void
                     {
                        _data = o;
                        if(o.@Mar == "true")
                           this.selected = true;
                        else
                           this.selected = false;
                              
                     }
                     private function update(event:MouseEvent):void
                     {
                        if(this.selected)
                        _data.checked = "true";
                        else
                           _data.checked = "false";      
                     }                                        
                  ]]>               
               </mx:Script>
               </mx:CheckBox>
               </mx:Component>
            </mx:itemRenderer>
            </mx:DataGridColumn>            


Ai alguien sabe como optimizar el codigo o hacerlo de otra manera, por favor que lo comparta

Por sergestux

49 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 May 2008 06:40 pm
Bueno al final he modificado el xml para que almacenara 0 y 1 en ves de false y true

Código :

<Conceptos>
<Concepto id="1" descripcion="Primer Concepto" Lun="0" Mar="0" Mier="1" Jue="0" Vie="1" Sab="0" Dom="0"/>
<Concepto id="2" descripcion="Segundo Concepto" Lun="0" Mar="1" Mier="1" Jue="0" Vie="1" Sab="0" Dom="0"/>
<Concepto id="3" descripcion="Tercer Concepto" Lun="1" Mar="0" Mier="1" Jue="1" Vie="0" Sab="1" Dom="0"/>
</Conceptos>

Quedando para el lunes de esta manera:

Código :

            <mx:DataGridColumn headerText="L" dataField="@Lun">
               <mx:itemRenderer>
               <mx:Component>
                  <mx:CheckBox>
                     <mx:Script>
                     <![CDATA[               
                        override public function set data(o:Object):void
                        {
                           this.selected = Boolean(int(o.@Lun));   //Lo convierto a entero, despues a boleano
                        }
                     ]]>               
                     </mx:Script>
                  </mx:CheckBox>
               </mx:Component>
            </mx:itemRenderer>
         </mx:DataGridColumn>

Por sergestux

49 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.