You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2018/08/28 22:04:22 UTC

[royale-asjs] branch develop updated: avoid listeners to remain when change dataProvider

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 <ca...@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)
 			{