Pregunta

Tengo el siguiente problema: he implementado un HeadRenderer personalizado para mi DataGridColumn. La idea es tener un menú desplegable cuando se hace clic en el encabezado de la columna. El problema es que no sé cómo agregar un oyente o pasar una variable al renderizador ya que la clase de renderizador está instanciada por la Factory.

La clase de renderizador:

<?xml version="1.0"?>
<!-- itemRenderers\dataGrid\myComponents\RendererDGHeader.mxml -->
<mx:HBox xmlns:mx="library://ns.adobe.com/flex/mx" 
 xmlns:fx="http://ns.adobe.com/mxml/2009" 
 width = "100%"
>
<fx:Script>


// ...

// Event handler for the Menu control's change event.
        private function menuHandler(evt:MenuEvent):void  {
            //Alert.show("Label: " + evt.item.@label, "Clicked menu item");

            if (evt.item.@eventName == "typeLat"){
             typeIcon.load("assets/type_location.jpg"); 
             evt.item.toggled=true;
            //variable.setColumnType(myLabel.text, "type");  // how can I pass "variable" to this renderer?                
            } else if (evt.item.@eventName == "typeLng"){
             typeIcon.load("assets/type_location.jpg"); 
             evt.item.toggled=true;
            } else if (evt.item.@eventName == "typeTime"){
             typeIcon.load("assets/type_time.png"); 
              evt.item.toggled=true;
            }

            else if (evt.item.@eventName == "similarity"){
               dispatchEvent(new SimilarityEvent("selectSimilarity", null, null)); // how to listen to this event?
            }
        }



</fx:Script>

 <fx:Declarations>
    <fx:XML id="myMenuData">
        <root>
            <menuitem label="Select type..." eventName="copy">
                <menuitem label="Other..." eventName="typeOther"/>
                <menuitem type="separator"/>
                <menuitem label="Order" type="check" eventName="typeOther"/>
                <menuitem label="Range" type="check" eventName="typeOther"/>
                <menuitem label="Date/Time" type="check" eventName="typeTime"/>
                <menuitem label="Latitude" type="check" eventName="typeLat"/>
                <menuitem label="Longitude" type="check" eventName="typeLng"/>
            </menuitem>
            <menuitem label="Define similarity..." eventName="similarity"/>
            <menuitem type="separator"/>
            <menuitem label="Filter objects..." eventName="similarity"/>
            <menuitem label="Order" eventName="similarity">
                <menuitem label="Ascending" eventName="typeOther"/>
                <menuitem label="Descending" eventName="typeOther"/>
            </menuitem>
            <menuitem type="separator"/>
            <menuitem label="Remove" eventName="paste"/>
        </root>
    </fx:XML>
</fx:Declarations>



<mx:Label id="myLabel" click="showMenu();"/>
<mx:Image height="20" id = "typeIcon"/>

</mx:HBox>

Así es como instancias al renderizador:

            var newColumn:DataGridColumn = new DataGridColumn(); 
            newColumn.dataField = attr;
            newColumn.headerText = attr;
            newColumn.sortable = false;
            newColumn.editable = false;
            newColumn.draggable = false;
            newColumn.headerRenderer = new ClassFactory(newviews.RendererDataHeader);
            cols.push(newColumn);

Cualquier ayuda será muy apreciada

¿Fue útil?

Solución

Agregue el oyente de eventos al control (datagrid) y haga burbuja de eventos, se atrapará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top