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]