This is an automated email from the ASF dual-hosted git repository. carlosrovira pushed a commit to branch feature/dataprovider-extensiblity in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 4c168894a5c2f3e420bb806525e340bf6883e130 Author: Carlos Rovira <[email protected]> AuthorDate: Thu Jul 23 19:34:02 2020 +0200 dataprovider factory: little refactor to make it more extensible for more complex components (jewel table) (cherry picked from commit a0e490c88b4b453bed9e59184a224de112888161) --- .../html/beads/DataItemRendererFactoryBase.as | 27 ++++++++------- .../DataItemRendererFactoryForCollectionView.as | 38 +++++++++++----------- .../royale/html/beads/ItemRendererFactoryBase.as | 9 +++-- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as index fc0758f..2f8cbd8 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as @@ -52,11 +52,6 @@ package org.apache.royale.html.beads } /** - * the dataProvider - */ - protected var dp:Object; - - /** * This Factory deletes all renderers, and generates a renderer * for every data provider item. * @@ -67,8 +62,7 @@ package org.apache.royale.html.beads * @royaleignorecoercion Array * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView * @royaleignorecoercion org.apache.royale.html.beads.IListView - * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer - * @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer + * @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView */ override protected function dataProviderChangeHandler(event:Event):void { @@ -77,10 +71,22 @@ package org.apache.royale.html.beads removeAllItemRenderers(dataGroup); - dp = dataProviderModel.dataProvider; - if (!dp) + if (!dataProviderModel.dataProvider) return; + createAllItemRenderers(dataGroup); + + dispatchItemCreatedEvent(); + } + + /** + * create all item renderers + * + * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer + * @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer + */ + protected function createAllItemRenderers(dataGroup:IItemRendererOwnerView):void + { var n:int = dataProviderLength; for (var i:int = 0; i < n; i++) { @@ -91,14 +97,11 @@ package org.apache.royale.html.beads (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, i); ir.data = data; } - - dispatchItemCreatedEvent(); } protected function dispatchItemCreatedEvent():void { sendStrandEvent(_strand,"itemsCreated"); } - } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as index d532595..01f3156 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as @@ -18,7 +18,6 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.html.beads { - import org.apache.royale.collections.ICollectionView; import org.apache.royale.core.IIndexedItemRenderer; import org.apache.royale.core.IIndexedItemRendererInitializer; import org.apache.royale.core.IItemRendererOwnerView; @@ -58,7 +57,7 @@ package org.apache.royale.html.beads super.dataProviderChangeHandler(event); - if (!dp) + if (!dataProviderModel.dataProvider) return; if(dped) @@ -68,13 +67,25 @@ package org.apache.royale.html.beads dped.removeEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); } // listen for individual items being added in the future. - dped = dp as IEventDispatcher; + dped = dataProviderModel.dataProvider as IEventDispatcher; dped.addEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler); dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); } /** + * check if model and dataprovider exists. This check is done through all methods + * @private + */ + private function get dataProviderExist():Boolean + { + if (!dataProviderModel || !dataProviderModel.dataProvider) + return false; + + return true; + } + + /** * @private * @royaleignorecoercion org.apache.royale.collections.ICollectionView * @royaleignorecoercion org.apache.royale.core.IListPresentationModel @@ -82,12 +93,8 @@ package org.apache.royale.html.beads */ protected function itemAddedHandler(event:CollectionEvent):void { - if (!dataProviderModel) + if(!dataProviderExist) return; - dp = dataProviderModel.dataProvider as ICollectionView; - if (!dp) - return; - var view:IListView = (_strand as IStrandWithModelView).view as IListView; var dataGroup:IItemRendererOwnerView = view.dataGroup; @@ -123,10 +130,7 @@ package org.apache.royale.html.beads */ protected function itemRemovedHandler(event:CollectionEvent):void { - if (!dataProviderModel) - return; - dp = dataProviderModel.dataProvider as ICollectionView; - if (!dp) + if(!dataProviderExist) return; var view:IListView = (_strand as IStrandWithModelView).view as IListView; @@ -160,10 +164,7 @@ package org.apache.royale.html.beads */ protected function itemUpdatedHandler(event:CollectionEvent):void { - if (!dataProviderModel) - return; - dp = dataProviderModel.dataProvider as ICollectionView; - if (!dp) + if(dataProviderExist) return; var view:IListView = (_strand as IStrandWithModelView).view as IListView; @@ -180,13 +181,12 @@ package org.apache.royale.html.beads override protected function get dataProviderLength():int { - return dp.length; + return dataProviderModel.dataProvider.length; } override protected function getItemAt(i:int):Object { - return dp.getItemAt(i); + return dataProviderModel.dataProvider.getItemAt(i); } - } } \ No newline at end of file diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as index 7a3f00d..0cb509e 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as @@ -18,17 +18,15 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.html.beads { - import org.apache.royale.core.IBead; + import org.apache.royale.core.DispatcherBead; import org.apache.royale.core.IDataProviderModel; import org.apache.royale.core.IItemRendererClassFactory; import org.apache.royale.core.IItemRendererInitializer; import org.apache.royale.core.IItemRendererOwnerView; import org.apache.royale.core.IStrand; import org.apache.royale.events.Event; - import org.apache.royale.events.EventDispatcher; import org.apache.royale.events.IEventDispatcher; import org.apache.royale.utils.loadBeadFromValuesManager; - import org.apache.royale.core.DispatcherBead; /** * The DataItemRendererFactoryBase class is a base class @@ -162,6 +160,11 @@ package org.apache.royale.html.beads { } + /** + * Remove all itemrenderers + * + * @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView + */ protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void { dataGroup.removeAllItemRenderers();
