This is an automated email from the ASF dual-hosted git repository. carlosrovira pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push: new b32d34d avoid listeners to remain when change dataProvider b32d34d is described below commit b32d34d1822c2b169a26a9534fa574a05705d165 Author: Carlos Rovira <carlosrov...@apache.org> AuthorDate: Wed Aug 29 00:04:18 2018 +0200 avoid listeners to remain when change dataProvider --- .../src/main/royale/TablePlayGround.mxml | 2 +- .../AddTableItemRendererForArrayListData.as | 20 ++++----- .../RemoveListItemRendererForArrayListData.as | 7 +++- .../RemoveTableItemRendererForArrayListData.as | 49 ++++++++++------------ .../UpdateListItemRendererForArrayListData.as | 9 +++- .../UpdateTableItemRendererForArrayListData.as | 41 +++++++----------- .../royale/jewel/itemRenderers/ListItemRenderer.as | 2 +- .../jewel/itemRenderers/TableItemRenderer.as | 2 +- 8 files changed, 63 insertions(+), 69 deletions(-) diff --git a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml index 05b9d9e..72acba0 100644 --- a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml +++ b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml @@ -240,7 +240,7 @@ limitations under the License. public function removeItemAt():void { - (table.dataProvider as ArrayList).removeAll(); + (table.dataProvider as ArrayList).removeItemAt(0); // tablesModel.guitarrists.removeItemAt(0); } diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as index 1b489c5..1150310 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as @@ -62,11 +62,8 @@ package org.apache.royale.jewel.beads.itemRenderers public function AddTableItemRendererForArrayListData() { } - + protected var _strand:IStrand; - - protected var labelField:String; - /** * @copy org.apache.royale.core.IStrand * @@ -80,7 +77,11 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } + + protected var labelField:String; + protected var model:TableModel; + /** * finish setup * @@ -132,8 +133,7 @@ package org.apache.royale.jewel.beads.itemRenderers { var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel; var column:TableColumn; - var tbody:TBodyContentArea = itemRendererParent as TBodyContentArea; - var ir:ITextItemRenderer; + var ir:ITextItemRenderer; var index:int = event.index * model.columns.length; for(var j:int = 0; j < model.columns.length; j++) @@ -145,7 +145,7 @@ package org.apache.royale.jewel.beads.itemRenderers ir = column.itemRenderer.newInstance() as ITextItemRenderer; } else { - ir = itemRendererFactory.createItemRenderer(tbody) as ITextItemRenderer; + ir = itemRendererFactory.createItemRenderer(itemRendererParent) as ITextItemRenderer; } labelField = column.dataField; @@ -163,11 +163,11 @@ package org.apache.royale.jewel.beads.itemRenderers } // update the index values in the itemRenderers to correspond to their shifted positions. - var n:int = tbody.numElements; + var n:int = itemRendererParent.numElements; var d:DataItemRenderer; for (var i:int = event.index; i < n; i++) { - d = tbody.getItemRendererForIndex(i) as DataItemRenderer; + d = itemRendererParent.getItemRendererForIndex(i) as DataItemRenderer; d.index = i; } @@ -213,8 +213,6 @@ package org.apache.royale.jewel.beads.itemRenderers return _itemRendererFactory; } - protected var model:TableModel; - /** * @private */ diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as index 9c280d7..e2c2da0 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveListItemRendererForArrayListData.as @@ -88,12 +88,17 @@ package org.apache.royale.jewel.beads.itemRenderers dataProviderChangeHandler(null); } + private var dp:IEventDispatcher; /** * @private */ protected function dataProviderChangeHandler(event:Event):void { - var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher; + if(dp) + { + dp.removeEventListener(CollectionEvent.ITEM_REMOVED, handleItemRemoved); + } + dp = dataProviderModel.dataProvider as IEventDispatcher; if (!dp) return; diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveTableItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveTableItemRendererForArrayListData.as index 837d1df..bdfcf44 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveTableItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/RemoveTableItemRendererForArrayListData.as @@ -29,6 +29,7 @@ package org.apache.royale.jewel.beads.itemRenderers import org.apache.royale.events.CollectionEvent; import org.apache.royale.events.Event; import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.jewel.beads.models.TableModel; /** * Handles the removal of an itemRenderer in a Table component once the corresponding @@ -54,7 +55,6 @@ package org.apache.royale.jewel.beads.itemRenderers } private var _strand:IStrand; - /** * @copy org.apache.royale.core.IStrand * @@ -68,6 +68,10 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } + + protected var labelField:String; + + protected var model:TableModel; /** * finish setup @@ -81,19 +85,26 @@ package org.apache.royale.jewel.beads.itemRenderers { IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + model = _strand.getBeadByType(ISelectionModel) as TableModel; + labelField = model.labelField; + + model.addEventListener("dataProviderChanged", dataProviderChangeHandler); // invoke now in case "dataProviderChanged" has already been dispatched. dataProviderChangeHandler(null); } + private var dp:IEventDispatcher; /** - * @private + * @private */ protected function dataProviderChangeHandler(event:Event):void { - var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher; + if(dp) + { + dp.removeEventListener(CollectionEvent.ITEM_REMOVED, handleItemRemoved); + } + dp = model.dataProvider as IEventDispatcher; if (!dp) return; @@ -112,9 +123,14 @@ package org.apache.royale.jewel.beads.itemRenderers protected function handleItemRemoved(event:CollectionEvent):void { var parent:UIBase = itemRendererParent as UIBase; - var ir:ISelectableItemRenderer = parent.getElementAt(event.index) as ISelectableItemRenderer; - itemRendererParent.removeItemRenderer(ir); + var ir:ISelectableItemRenderer; + // for(var j:int = 0; j < model.columns.length; j++) + // { + ir = parent.getElementAt(event.index) as ISelectableItemRenderer; + itemRendererParent.removeItemRenderer(ir); + // } + // adjust the itemRenderers' index to adjust for the shift var n:int = parent.numElements; for (var i:int = event.index; i < n; i++) @@ -126,25 +142,6 @@ package org.apache.royale.jewel.beads.itemRenderers (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); } - private var _dataProviderModel: IDataProviderModel; - - /** - * The org.apache.royale.core.IDataProviderModel that contains the - * data source. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.9.3 - */ - public function get dataProviderModel(): IDataProviderModel - { - if (_dataProviderModel == null) { - _dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; - } - return _dataProviderModel; - } - private var _itemRendererParent: IItemRendererParent; /** diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as index 53a7f0b..b3203a0 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateListItemRendererForArrayListData.as @@ -91,12 +91,17 @@ package org.apache.royale.jewel.beads.itemRenderers dataProviderChangeHandler(null); } + private var dp:IEventDispatcher; /** - * @private + * @private */ protected function dataProviderChangeHandler(event:Event):void { - var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher; + if(dp) + { + dp.removeEventListener(CollectionEvent.ITEM_UPDATED, handleItemUpdated); + } + dp = dataProviderModel.dataProvider as IEventDispatcher; if (!dp) return; diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateTableItemRendererForArrayListData.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateTableItemRendererForArrayListData.as index c6eb3ee..3675c4f 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateTableItemRendererForArrayListData.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/UpdateTableItemRendererForArrayListData.as @@ -28,6 +28,7 @@ package org.apache.royale.jewel.beads.itemRenderers import org.apache.royale.events.CollectionEvent; import org.apache.royale.events.Event; import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.jewel.beads.models.TableModel; /** * Handles the update of an itemRenderer in a Table component once the corresponding @@ -52,10 +53,8 @@ package org.apache.royale.jewel.beads.itemRenderers { } + protected var _strand:IStrand; - - protected var labelField:String; - /** * @copy org.apache.royale.core.IStrand * @@ -69,7 +68,11 @@ package org.apache.royale.jewel.beads.itemRenderers _strand = value; IEventDispatcher(value).addEventListener("initComplete", initComplete); } + + protected var labelField:String; + protected var model:TableModel; + /** * finish setup * @@ -82,21 +85,26 @@ package org.apache.royale.jewel.beads.itemRenderers { IEventDispatcher(_strand).removeEventListener("initComplete", initComplete); - _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; - labelField = _dataProviderModel.labelField; + model = _strand.getBeadByType(ISelectionModel) as TableModel; + labelField = model.labelField; - dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + model.addEventListener("dataProviderChanged", dataProviderChangeHandler); // invoke now in case "dataProviderChanged" has already been dispatched. dataProviderChangeHandler(null); } + private var dp:IEventDispatcher; /** * @private */ protected function dataProviderChangeHandler(event:Event):void { - var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher; + if(dp) + { + dp.removeEventListener(CollectionEvent.ITEM_UPDATED, handleItemUpdated); + } + dp = model.dataProvider as IEventDispatcher; if (!dp) return; @@ -121,25 +129,6 @@ package org.apache.royale.jewel.beads.itemRenderers (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); } - private var _dataProviderModel:IDataProviderModel; - - /** - * The org.apache.royale.core.IDataProviderModel that contains the - * data source. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.9.3 - */ - public function get dataProviderModel():IDataProviderModel - { - if (_dataProviderModel == null) { - _dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; - } - return _dataProviderModel; - } - private var _itemRendererParent: IItemRendererParent; /** diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ListItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ListItemRenderer.as index a08a4b4..7d16c2f 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ListItemRenderer.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ListItemRenderer.as @@ -109,7 +109,7 @@ package org.apache.royale.jewel.itemRenderers COMPILE::JS override protected function createElement():WrappedHTMLElement { - addElementToWrapper(this,'li'); + addElementToWrapper(this, 'li'); if(MXMLDescriptor == null) { diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TableItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TableItemRenderer.as index 76a2346..92cb397 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TableItemRenderer.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TableItemRenderer.as @@ -86,7 +86,7 @@ package org.apache.royale.jewel.itemRenderers COMPILE::JS override protected function createElement():WrappedHTMLElement { - addElementToWrapper(this,'div'); + addElementToWrapper(this, 'div'); if(MXMLDescriptor == null) {