Comunidad de diseño web y desarrollo en internet online

checkbox con valor 1 y 0 en flex

Citar            
MensajeEscrito el 04 Feb 2010 12:45 am
Hola, me preguntaba si alguien me puede echar una manito indicándome por encima como extiendo el chackbox para que en vez de true y false, reciba los valores 1 y 0, es que mysql no maneja esos datos muy bien.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 04 Feb 2010 03:44 pm
Con que le hagas un cast a Number al valor que recibes es suficiente

trace(Number(false))
trace(Number(true))

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 03:56 pm
si fuera un solo checkbox estaría bien, incluso si fuera un solo dato, pero recibo un array con 1 y 0, ese array debe alimentar varios checkboxes que actuan como itemrenderers en un datagrid.

Verás, si yo recibiera datos como false y true, solucionaría mi problema sin hacer nada, pero recibo 1 y 0, esos numeros no le sirven al checkbox, solo valores boolean, necesito extender la clase checkbox para que reciba numeros en vez de boolean, así puedo asignar mi dataprovider y ellos tomarán los datos bien.

El problema está en que la clase checkbox es muy enredada y no tengo mucha experiencia extendiendo componentes, así que necesito a alguien que me guie un poco, que me de unas pautas, porque no he encontrado nada parecido en ninguna parte, ni tampoco otra forma de manejar lo que quiero.

Espero haberme hecho entender.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 06 Feb 2010 01:14 am
tinyint mysql maneja ceros y uno si pasas un booleano lo transforma

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Feb 2010 02:26 pm
Ese es precisamente el problema, si no los transformara, podría volver a leer los valores y el checkbox los aceptaría, pero como los transforma, pues cuando le la tabla me llegan solo 1 y 0, y los checkbox no responden a esos datos, por eso necesito crear un componente basado en checkbox que no reciba boolean, sino 1 y 0.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 06 Feb 2010 06:23 pm
pero llena el combo box de ceros y unos o sea un simple array
micombobox.dataprovider=arraydeunosyceros luego pergunta por el volaro

si valor en el arrray es cero
return flase
de lo contrario es true

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Feb 2010 09:05 pm
no es un combobox, tal vez leiste mal, es un checkbox, de los que se les da click y le aparece una marquita, como una X, o un chulito, y no se puede evaluar el valor del dataprovider, pensaba en hacer así:

Código :

 datafield="{Boolean(dato)}"
pero obviamente no funciona, no puede evaluar esa variable, y lo que no quiero es tener que pasar un loop al array para reemplazar todos los datos, simplemente con modificar el componente basta, pero no se que partes son necesarias.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 06 Feb 2010 11:42 pm
se supone que tu estas recibiendo 1 y 0 y suponpo que tienes en un datagrid como en itemrender
entonces cuando llegas tu datos en el item render evaluas , aca hay una serie de formas como
acotar ese problemas. Debes crear una columna esa columna sera una clase, luego con esto ya evaluas
sobre tu valores que vienen desde tu base de datos sin hacer un loop

http://blogs.adobe.com/aharui/2007/03/thinking_about_item_renderers_1.html

mira el ejemplo del cambio de color eso te ayudara bastante . suerte amigo

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Feb 2010 12:47 am
pues el valor contra el que debo evaluar es estático, osea, siempre será 1 o 0, así que no necesito la clase de la columna, pero el problema está en el itemrenderer (lo que he preguntado desde el principio) y es que en esa página solo trabajan con el itemrenderer nativo del datagrid, extendiéndolo, pero como no conozco mucho de extender componentes, pues me quedo aquí:

Código :

package clases
{
   import mx.controls.CheckBox;
   import mx.controls.DataGrid;
   import mx.controls.dataGridClasses.DataGridListData;

   public class MysqlCheckBox extends CheckBox
   {
      public function MysqlCheckBox()
      {
         super();
                        var grid1:DataGrid = DataGrid(DataGridListData(listData).owner);
         if (data[DataGridListData(listData).dataField] == 0)
         {
            //que hago?
         }
         else
         {
            //que hago?
         }
      } 
   }
}
y ni siquiera estoy seguro de que esté bien, se supone que hay que primero entender un montón de código de flex para extender componentes, y aunque me encantaría sentarme a estudiar los componentes y demás, no tengo el tiempo para ello, por eso quería saber si alguien tiene buen conocimiento de extender componentes para que me explicara algunas cosas rápidas y me solucionara unas dudas y así no tener que demorarme días a punta de ensayo y error.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 07 Feb 2010 01:05 am
Lo resolví gracias a un amigo, la respuesta está en especificar un in-line renderer, así:

Código :

<mx:columns>
         <mx:DataGridColumn headerText="Column 1" dataField="valor">
            <mx:itemRenderer>
               <mx:Component>
                  <mx:CheckBox selected="{data.valor}"/>
               </mx:Component>
            </mx:itemRenderer>
         </mx:DataGridColumn>
      </mx:columns>
y riéndome de mi ignorancia al no conocer esta técnica tan simple (aunque no tan usada de todas formas, no solo yo la ignoraba al parecer, juzgando por la falta de respuestas efectivas) me voy a seguir trabajando en mi proyecto, no sin antes agradecer el interés de todos ustedes, debo decir que aprendí algunas otras cosas leyendo sus aportes, sobre todo el último de xcom, encontré una mejor manera de cambiar el fondo de la celda, más liviana que la que tenía implementada. Gracias a todos, prometo estudiar sobre extensión de componentes porque se que es algo muy poderoso, tan pronto tenga una oportunidad me dedicaré a estudiarlos y a como sacarles provecho.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 08 Feb 2010 12:54 pm
¿Pero ese data.valor es 0 o 1 ?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Feb 2010 05:52 pm
si, como mencioné antes, mysql solo trabaja con valores 0 o 1, no false y true, así que mysql envía un array de 0 y 1

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 09 Feb 2010 10:31 pm
bueno aun quede metido , lo importante que debes saber es lo siguiente :

En mysql si mandas un true desde flex , cuando llegue a bd siendo este un campo
tinyint lo convertira en 1 y si mandas luego un false quedara un 0 , en otras versiones
de mysql era al reves, pero en el backend cuando tomes estos datos ya no sera
un cero y uno ya que java lo mapea con su conector y simplementes retorna true o flase
segun el valor que se encuentre en ese campo. En php me imagino que sera lo mismo.

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Feb 2010 11:37 pm
no, en php no es así, a no ser que hagas un loop y conviertas los datos, precisamente el tipo de procedimiento que quería evitar.

Verán, mi intención es programar de la forma más fácil posible sin sacrificar mucho el rendimiento o seguridad, y siguiendo ese lineamiento, yo no creo value objects, que es crear una clase en php y otra equivalente en AS3, porque eso me dejaría con montones de clases de ambos lados y un tremendo dolor de cabeza al hacer debug, la solución que encontré es perfectamente adecuada y no requiere hacks raros.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 15 Abr 2010 07:14 pm
He estado en un proyecto urgando por aquí y por allá, para resolver la misma problemática que se presenta en esta discusión.
Tengo campos en donde se guardan caracteres en lugar de campos boleanos, pero estos valores de tipo caracter son binarios ( solo puede ser uno de 2 valores ).
De este modo en una consulta recibiremos un 1 o 0 en su representación en cadena y el componente de checkbox debe interpretar el valor para dibujar su estado.
Despues de 2 días logre crear un componente que es capaz de traducir el valor que tu especifiques mediante 2 propiedades:
1.- CheckedValue
2.- UnChecedValue

Es dichas propiedades se le especifica al componente que valor va a reconocer como el valor en alto y cual valor representa el valor en bajo.

Nota: El componente tiene un truquillo para trabajar como itemEditor en un DataGrid, porque si se necesita editar sobre el Grid, se tendra que especificar en la propiedad editorDataField la propiedad valueField.
Nota: El content asist no sugiere las propiedades del componente, no tengo más tiempo de perfeccionar el componente así que lo dejo a su disposición esperando que no lo vayan a vender.


Código ActionScript :

/**
 * @autor Victor Manuel Bucio Vargas*/
import mx.controls.dataGridClasses.DataGridListData;



private var _data:Object;
private var _CheckValue:Object;
private var _UnCheckValue:Object;

//------------------------------------------------------------------------
/**
 * @since Esta propiedad sirve para especificar el valor que se desea
 * escribir en la propiedad del objeto cuando el valor de selected
 * es true*/
public function set CheckValue(valor:Object):void
{
   _CheckValue = valor;
}

//------------------------------------------------------------------------
/**
 * @since Esta propiedad sirve para especificar el valor que se desea
 * escribir en la propiedad del objeto cuando el valor de selected
 * es false*/
public function set UnCheckValue (valor:Object):void
{
   _UnCheckValue = valor;
}

//------------------------------------------------------------------------
/*public function set valueField (valor:Object):void
{
   if (_data[DataGridListData(listData).dataField] is String)
   {
      if (selected) 
             _data[DataGridListData(listData).dataField] = new String(_CheckValue);
             
       else
             _data[DataGridListData(listData).dataField] = new String(_UnCheckValue);
    }
            
    else if (_data[DataGridListData(listData).dataField] is int)
    {
       if (selected) 
             _data[DataGridListData(listData).dataField] = _CheckValue;
          
          else
             _data[DataGridListData(listData).dataField] = _UnCheckValue;
    }
               
    else if ( _data[this.selectedField] is Boolean)
       _data[DataGridListData(listData).dataField] = selected;
}*/

//------------------------------------------------------------------------
/**
 * @since Esta propiedad de debe especificar en el editorDataField de un DataGrid
 * para que el grid pueda saber de donde va a tomar el valor de la celda
 * cuando se repinta la celda tras editar*/
public function get valueField ():Object
{
   return _data[DataGridListData(listData).dataField];   
}

//------------------------------------------------------------------------
/**
 * @since Esta propiedad se encarga de recibir el objeto del cual se busca
 * traducir una de sus propiedades para mostrarla en el checkbox.*/
override public function set data(valor:Object):void
{
   var representa:Boolean;

   //1.- Verificamos si el Check Funge como ItemRender en algun Grid
   if (listData && listData is DataGridListData && DataGridListData(listData).dataField != null)
    {
          if (valor[DataGridListData(listData).dataField] is String)
            representa = valor[DataGridListData(listData).dataField] == _CheckValue.toString();
            
        else if (valor[DataGridListData(listData).dataField] is int)
           representa = valor[DataGridListData(listData).dataField] == _CheckValue;
               
        else if ( valor[this.selectedField] is Boolean)
            representa = valor[DataGridListData(listData).dataField] as Boolean;
    }
        
    //2.- Verificamos si el componente Check funge como ItemRender en alun List (Tiene que ser boolean)
    else if (listData)
    {
        if (selectedField)
            representa = valor[selectedField];
    }
    
    //Verificamos si el Check se esta utilizando como un simple componente
    else if (selectedField && valor)
    {
       if ( valor[selectedField] is String)
            representa = valor[selectedField] == _CheckValue.toString();
            
        else if ( valor[selectedField] is int)
           representa = valor[selectedField] == _CheckValue;
               
        else if ( valor[this.selectedField] is Boolean)
            representa = valor[selectedField] as Boolean;
       //representa = valor[selectedField];
    }
    
    //Se esta enviando el valor a trabajar directame el valor
    else
    {
       if ( valor is String)
            representa = valor == _CheckValue.toString();
            
        else if ( valor is int)
           representa = valor == _CheckValue;
               
        else if ( valor[this.selectedField] is Boolean)
            representa = valor as Boolean;
        //representa = valor;
    }
    
    _data = valor;
    this.selected = representa;
   //super.dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}

//------------------------------------------------------------------------
/**
 * @since Esta propiedad le devuelve el objeto actualizado al metodo que pinta 
 * la celda*/
override public function get data():Object
{
   return _data;
}

//------------------------------------------------------------------------
/**
 * @since Este evento se encarga de traducir el valor en la propiedad selected
 * a la representación solicitada por el usuario*/
override protected function clickHandler(event:MouseEvent):void
{
   super.clickHandler(event);
   
   //1.- Verificamos si el Check Funge como ItemRender en algun Grid
   if (listData && listData is DataGridListData && DataGridListData(listData).dataField != null)
    {
      if (_data[DataGridListData(listData).dataField] is String)
      {
         if (selected) 
                _data[DataGridListData(listData).dataField] = new String(_CheckValue);
                
          else
                _data[DataGridListData(listData).dataField] = new String(_UnCheckValue);
       }
               
       else if (_data[DataGridListData(listData).dataField] is int)
          _data[DataGridListData(listData).dataField] = _CheckValue;
                  
       else if ( _data[this.selectedField] is Boolean)
          _data[DataGridListData(listData).dataField] = selected;
    }
    
     //2.- Verificamos si el componente Check funge como ItemRender en alun List (Tiene que ser boolean)
     else if (listData)
    {
        if (selectedField)
            _data[selectedField] = selected;
    }
    
    //Verificamos si el Check se esta utilizando como un simple componente
    else if (selectedField && _data)
    {
       if ( _data[selectedField] is String)
            _data[selectedField] = selected?new String( _CheckValue) :new String(_UnCheckValue);
            
        else if ( _data[selectedField] is int)
           _data[selectedField] = selected?_CheckValue:_UnCheckValue;
               
        else if ( _data[this.selectedField] is Boolean)
            _data[selectedField] = selected;
    }
    
    //Se esta enviando el valor a trabajar directame el valor
    else
    {
       if ( _data is String)
           _data = selected? new String(_CheckValue): new String(_UnCheckValue);
            
        else if ( _data is int)
          _data = selected? _CheckValue : _UnCheckValue;
               
        else if ( _data is Boolean)
          _data = selected;
    }

}


<?xml version="1.0" encoding="utf-8"?>
<mx:CheckBox xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script source="RichCheckBox.as" />
</mx:CheckBox>

Por vmbv_syswave

0 de clabLevel



 

msie8

 

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