| 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. |
|
|
Con que le hagas un cast a Number al valor que recibes es suficiente trace(Number(false)) trace(Number(true)) Jorge |
solisarg
1 Tutorial |
|
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. |
|
| tinyint mysql maneja ceros y uno si pasas un booleano lo transforma |
|
| 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. |
|
|
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 |
|
|
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. |
|
|
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 |
|
|
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. |
|
|
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. |
|
|
¿Pero ese data.valor es 0 o 1 ? Jorge |
solisarg
1 Tutorial |
| 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 |
|
|
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. |
|
|
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. |
|