I think my solution is a bit better, cause there are a lot of things may happen before event dataProviderChanged is going to be dispatched. I suggest you go with that direction instead above.
czw., 25 mar 2021 o 13:20 David Slotemaker de Bruine < [email protected]> napisał(a): > Hi Piotr, > > I could get that to work, the screen would paint only the background color > with no error in the console. > > I ended up going with: > > public override function set dataProvider(data:Object):void > { > super.dataProvider = data; > handleResponsiveSizeChange(null); > } > > which is more or less what you where suggesting correcte? This works but I > am not sure what sort of overhead a call to handleResponsiveSizeChange on > every update to the DataGrid, not much by the looks of things. > > Thanks. > > David > > On Thu, 25 Mar 2021 at 12:37, Piotr Zarzycki <[email protected]> > wrote: > >> ahh Sorry I didn't notice. So you essentially need to know that >> dataProvider changed, because when it happened probably your columns are >> also ready. You can do this in initComplete: >> >> var sharedModel:IDataGridModel = dataGrid.getBeadByType(IDataGridModel) as >> IDataGridModel; >> >> IEventDispatcher(sharedModel).addEventListener("dataProviderChanged", >> handleDataProviderChanged); >> >> >> czw., 25 mar 2021 o 12:16 David Slotemaker de Bruine < >> [email protected]> napisał(a): >> >>> Hi Piotr, >>> >>> I am not sure what you mea or where I am to out the listener. In the >>> code above there is a listener in the extended DataGrid: >>> initComplete="onInitComplete(event)" >>> >>> >>> >>> On Thu, 25 Mar 2021 at 12:06, Piotr Zarzycki <[email protected]> >>> wrote: >>> >>>> Hi David, >>>> >>>> Did you try add event listener initComplete to DataGrid itself >>>> initially ? >>>> >>>> Thanks, >>>> Piotr >>>> >>>> czw., 25 mar 2021 o 11:38 David Slotemaker de Bruine < >>>> [email protected]> napisał(a): >>>> >>>>> Hi, >>>>> >>>>> I am trying to set columns in a Datagrid depending on the size of the >>>>> screen. >>>>> >>>>> I have extended the DataGrid Component and added Array Variables that >>>>> contain the columns that should be visible at each screen size. I have >>>>> added a <j:ResponsiveResizeListener localId="resizer"/> to the component. >>>>> On initCompleteEvent I setup the listeners for the ResponsiveSize Events. >>>>> These all fire correctly and the colums are changed dynamically when the >>>>> browser size is changed. The exception is the first time the page is >>>>> loaded >>>>> as no "resize" event fires. >>>>> >>>>> I have tried manually calling the handler duing the InitCompleteEvent >>>>> but the Array variables that contain the list of columns are empty at this >>>>> point. Is there another event that I can listen for? >>>>> >>>>> The datagrid code is: >>>>> >>>>> <?xml version="1.0" encoding="utf-8"?> >>>>> <j:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" >>>>> xmlns:js="library://ns.apache.org/royale/basic" >>>>> xmlns:j="library://ns.apache.org/royale/jewel" >>>>> initComplete="onInitComplete(event)" >>>>> > >>>>> <j:beads> >>>>> <j:ResponsiveResizeListener localId="resizer"/> >>>>> <!--<js:ViewDataBinding/>--> >>>>> </j:beads> >>>>> <fx:Script> >>>>> <![CDATA[ >>>>> import org.apache.royale.collections.ArrayList; >>>>> import >>>>> org.apache.royale.jewel.supportClasses.ResponsiveSizes; >>>>> >>>>> public var columnsPhone:Array = new Array(); >>>>> public var columnsTablet:Array = new Array(); >>>>> public var columnsDesktop:Array = new Array(); >>>>> public var columnsWideScreen:Array = new Array(); >>>>> public var columnsFull:Array = new Array(); >>>>> >>>>> protected function onInitComplete(event:Event):void{ >>>>> setResponsiveSizeIndicatorListeners(); >>>>> handleResponsiveSizeChange(null); >>>>> } >>>>> >>>>> private function setColumns(newColumns:Array):void >>>>> { >>>>> if(newColumns.length != 0) >>>>> { >>>>> this.columns = newColumns; >>>>> } >>>>> } >>>>> >>>>> private function >>>>> setResponsiveSizeIndicatorListeners():void >>>>> { >>>>> this.addEventListener('phoneResponsiveSize', >>>>> handleResponsiveSizeChange); >>>>> this.addEventListener('tabletResponsiveSize', >>>>> handleResponsiveSizeChange); >>>>> this.addEventListener('desktopResponsiveSize', >>>>> handleResponsiveSizeChange); >>>>> this.addEventListener('widescreenResponsiveSize', >>>>> handleResponsiveSizeChange); >>>>> this.addEventListener('fullResponsiveSize', >>>>> handleResponsiveSizeChange); >>>>> } >>>>> >>>>> private function handleResponsiveSizeChange(event:Event = >>>>> null):void >>>>> { >>>>> if(resizer.currentResponsiveSize == ResponsiveSizes.PHONE) >>>>> { >>>>> setColumns(columnsPhone); >>>>> } >>>>> else if(resizer.currentResponsiveSize == >>>>> ResponsiveSizes.TABLET) { >>>>> setColumns(columnsTablet); >>>>> } >>>>> else if(resizer.currentResponsiveSize == >>>>> ResponsiveSizes.DESKTOP) { >>>>> setColumns(columnsDesktop); >>>>> } >>>>> else if(resizer.currentResponsiveSize == >>>>> ResponsiveSizes.WIDESCREEN) { >>>>> setColumns(columnsWideScreen); >>>>> } >>>>> else if(resizer.currentResponsiveSize == >>>>> ResponsiveSizes.FULL) { >>>>> setColumns(columnsFull); >>>>> } >>>>> } >>>>> ]]> >>>>> </fx:Script> >>>>> </j:DataGrid> >>>>> >>>>> And I set the mxml this way: >>>>> >>>>> <components:DataGridExtended id="dg" width="100%" height="314" >>>>> >>>>> dataProvider="{pCSearchResults.pagedData}" >>>>> >>>>> columnsPhone="{[dgcCodigo,dgcNombre,dgcGPS,dgcTelSimple]}" >>>>> columnsTablet="{[dgcCodigo,dgcNombre]}" >>>>> >>>>> columnsDesktop="{[dgcCodigo,dgcNombre,dgcPoblacion]}" >>>>> >>>>> columnsWideScreen="{[dgcCodigo,dgcNombre,dgcPoblacion,dgcGPS,]}" >>>>> >>>>> columnsFull="{[dgcCodigo,dgcNombre,dgcPoblacion,dgcGPS]}" >>>>> > >>>>> <components:columns> >>>>> <j:DataGridColumn localId="dgcCodigo" label="Codigo" >>>>> dataField="notesCliente" /> >>>>> <j:DataGridColumn localId="dgcNombre" label="Nombre" >>>>> dataField="nombreCompleto" /> >>>>> <j:DataGridColumn localId="dgcPoblacion" label="Poblacion" >>>>> dataField="poblacionNombre" /> >>>>> <j:DataGridColumn localId="dgcGPS" label="GPS" >>>>> dataField="direccionLatLong" columnWidth="50" /><j:DataGridColumn >>>>> localId="dgcTelSimple" label="Tlfno" dataField="tlfno" columnWidth="50" /> >>>>> </components:columns> >>>>> </components:DataGridExtended> >>>>> >>>> >>>> >>>> -- >>>> >>>> Piotr Zarzycki >>>> >>> >>> >>> -- >>> >>> *David Slotemaker de Bruïne* >>> *Head of Educational Robotics* >>> >>> >>> >>> Av. Sarriá, 130 - 08017 Barcelona >>> <https://maps.google.com/?q=Av.+Sarri%C3%A1,+130+-+08017+Barcelona&entry=gmail&source=g> >>> >>> >>> T. +34 932 523 729 ext. 135 >>> >>> [email protected] >>> >> >> >> -- >> >> Piotr Zarzycki >> > > > -- > > *David Slotemaker de Bruïne* > *Head of Educational Robotics* > > > > Av. Sarriá, 130 - 08017 Barcelona > <https://maps.google.com/?q=Av.+Sarri%C3%A1,+130+-+08017+Barcelona&entry=gmail&source=g> > > > T. +34 932 523 729 ext. 135 > > [email protected] > -- Piotr Zarzycki
