Pues vengo con este problema que no le encuentro ni pies ni cabeza. Estoy haciendo una pequeña aplicacion de edición de articulos de una tienda virtual mediante un datagrid. Aun no llego a la parte de la conexion con SQL pero ya está hecha con BlazeDS tan sólo basta implementarla, pero el problema no está allí.
El DG lo lleno con un ArrayCollection como DataProvider, pero el problema tampoco está allí. Resulta que entre los datos que guardo de un articulo tengo la categoria a la que pertenece y la imagen asociada. Para ambas columnas de la tabla uso un ItemEditor. El ItemEditor de la columna de categoria se trata de un mx:Box que tan solo contiene un ComboBox. Este es el codigo:
Porción de código del DataGrid:
Código Flex :
<mx:DataGridColumn headerText="Categoria" dataField="categoria" width="150" itemEditor="ComboCategoria" editorDataField="newValue" resizable="false"/>
Código del Box (que uso como itemEditor: ComboCategoria.mxml):
Código Flex :
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
super.data = value;
newValue = value.categoria;
dd.selectedItem = value.categoria;
}
]]>
</mx:Script>
<mx:String id="newValue" />
<mx:ComboBox id="dd"
change="{newValue = (dd.selectedItem.toString())}">
<mx:dataProvider>
<mx:Array>
<mx:String>Abarrotes y alimentos</mx:String>
<mx:String>Electrodomésticos</mx:String>
<mx:String>Muebles</mx:String>
<mx:String>Tecnología</mx:String>
</mx:Array>
</mx:dataProvider>
</mx:ComboBox>
</mx:Box>
Esa parte funciona a la perfección. El problema viene en la parte de la imagen. Para esto uso un PopUp para agregar un nuevo articulo en el que uso tanto el combobox ya mencionado para las categorias asi como un FileReference y su metodo browse() para obtener la imagen deseada. Pero una vez que intento implementar el mismo codigo modificado como ItemEditor ya no funciona, es decir no edita el valor de la columna se queda el mismo valor inicial.
Porción de código del DG:
Código Flex :
<mx:DataGridColumn headerText="Imagen" dataField="imagen" resizable="false" width="100" itemEditor="SeleccionarArchivo" editorDataField="nuevoValor">
Código del Box (que uso como itemEditor: SeleccionarArchivo.mxml):
Código Flex :
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="init()">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
private var imagesFilter:FileFilter = new FileFilter("Imagenes(*.jpg,*.jpeg,*.gif,*.png)", "*.jpg;*.jpeg;*.gif;*.png");
private var bitMapFilter:FileFilter = new FileFilter("Mapa de bits(*.bmp)", "*.bmp");
private var photoShop:FileFilter = new FileFilter("Archivos Photoshop(*.psd)", "*.psd");
private var fileref:FileReference = new FileReference();
private function buscar():void {
fileref.browse([imagesFilter,bitMapFilter,photoShop]);
}
private function selectHandler(e:Event):void {
nuevoValor = fileref.name;
}
private function init():void{
fileref.addEventListener(Event.SELECT,selectHandler);
}
override public function set data(value:Object):void
{
super.data = value;
nuevoValor = value.imagen;
}
]]>
</mx:Script>
<mx:String id="nuevoValor"/>
<mx:Button id="boton" label="Seleccionar" click="buscar()"/>
</mx:Box>
El problema lo intenté rastrear y me he dado cuenta que lo que sucede es que el Listener nunca responde y no se si sea porque el Evento nunca se lanza. Esto lo sé porque al usar un dispatchEvent después de la línea fileref.browse([imagesFilter,bitMapFilter,photoShop]); es la unica forma de que el evento se lance y entonces sí llama al Handler. Entonces no sé si el problema es ese Listener o si el evento SELECT no se está lanzando y porqué.
Recurro a ustedes porque ya no encuentro la forma de solucionar el problema. Cabe mencionar que lanzar el evento con dispatchEvent no me funciona porque lo mandaría yo a llamar despues del browse() y entonces hace uso del fileref.name, el cual por el workflow es aun nulo(pues al mandar a llamar al metodo browsw() se abre la ventana pero aun no se ha seleccionado ningun archivo).
