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)
                        {

Reply via email to