This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch has
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 823f0262a505c560d0ee48401eaf5b3c012e6c31
Author: Alex Harui <[email protected]>
AuthorDate: Wed Jan 29 13:33:26 2020 -0800

    rough pieces of the refactor.  Still need to add 'has' checks
---
 ...ArrayData.as => DataItemRendererFactoryBase.as} | 110 ++++++-----
 .../beads/DataItemRendererFactoryForArrayData.as   | 160 +++-------------
 .../beads/DataItemRendererFactoryForArrayList.as   | 119 +-----------
 .../DataItemRendererFactoryForCollectionView.as    | 148 +--------------
 .../beads/DataItemRendererFactoryForColumnData.as  |  82 +--------
 .../DataItemRendererFactoryForHierarchicalData.as  |  19 --
 .../html/beads/ListItemRendererInitializer.as      | 108 +++++++++++
 ...ataItemRendererFactoryForSeriesArrayListData.as |  96 ++--------
 .../beads/DataItemRendererFactoryForSeriesData.as  | 203 +++++++++++++--------
 .../{IItemRenderer.as => IIndexedItemRenderer.as}  |  36 +---
 ...derer.as => IIndexedItemRendererInitializer.as} |  48 ++---
 .../royale/org/apache/royale/core/IItemRenderer.as |  12 --
 .../royale/core/IItemRendererClassFactory.as       |   8 +-
 ...ItemRenderer.as => IItemRendererInitializer.as} |  51 ++----
 .../apache/royale/core/ItemRendererClassFactory.as |  11 +-
 ...actoryForICollectionViewAdvancedDataGridData.as |  19 --
 ...ataItemRendererFactoryForICollectionViewData.as |  74 +++++---
 .../DataItemRendererFactoryForIListData.as         |  72 ++++----
 ...rerFactoryForICollectionViewHierarchicalData.as |  34 +---
 19 files changed, 479 insertions(+), 931 deletions(-)

diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
similarity index 71%
copy from 
frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
copy to 
frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
index d9e5141..2cfc0b4 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
@@ -34,7 +34,6 @@ package org.apache.royale.html.beads
        import org.apache.royale.events.Event;
        import org.apache.royale.events.EventDispatcher;
        import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.events.ItemRendererEvent;
        import org.apache.royale.html.List;
        
     import org.apache.royale.html.beads.IListView;
@@ -46,8 +45,6 @@ package org.apache.royale.html.beads
        import org.apache.royale.utils.sendEvent;
        import org.apache.royale.utils.sendStrandEvent;
 
-    
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-       
     /**
      *  The DataItemRendererFactoryForArrayData class reads an
      *  array of data and creates an item renderer for every
@@ -60,7 +57,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-       public class DataItemRendererFactoryForArrayData extends 
EventDispatcher implements IBead, IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryBase extends EventDispatcher 
implements IBead, IDataProviderItemRendererMapper
        {
         /**
          *  Constructor.
@@ -70,18 +67,15 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.8
          */
-               public function 
DataItemRendererFactoryForArrayData(target:Object=null)
+               public function DataItemRendererFactoryBase(target:Object=null)
                {
                        super(target);
                }
 
                protected var dataProviderModel:IDataProviderModel;
-               protected var dataFieldProvider:DataFieldProviderBead;
+               //protected var dataFieldProvider:DataFieldProviderBead;
                
-               protected var labelField:String;
-        protected var dataField:String;
-
-               private var _strand:IStrand;
+               protected var _strand:IStrand;
                
         /**
          *  @copy org.apache.royale.core.IBead#strand
@@ -104,18 +98,19 @@ package org.apache.royale.html.beads
                 * @royaleignorecoercion 
org.apache.royale.core.IItemRendererClassFactory
                 * @royaleignorecoercion 
org.apache.royale.html.beads.DataFieldProviderBead
                 */
-               private function finishSetup(event:Event):void
+               protected function finishSetup(event:Event):void
                {                       
                        dataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
                        
dataProviderModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       labelField = dataProviderModel.labelField;
 
+            /*
             dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) 
as DataFieldProviderBead;
                        if (dataFieldProvider)
             {
                 dataField = dataFieldProvider.dataField;
             }
-
+            */
+            
                        // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will 
                        // already have been loaded by 
DataContainerBase.addedToParent function.
                        if(!_itemRendererFactory)
@@ -152,9 +147,37 @@ package org.apache.royale.html.beads
                        _itemRendererFactory = value;
                }
                
+        private var _itemRendererInitializer:IItemRendererInitializer;
+        
+        /**
+         *  The org.apache.royale.core.IItemRendererInitializer used 
+         *  to initialize instances of item renderers.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.8
+         *  @royaleignorecoercion 
org.apache.royale.core.IItemRendererInitializer
+         */
+        public function get itemRendererInitializer():IItemRendererInitializer
+        {
+            if(!_itemRendererInitializer)
+                _itemRendererInitializer = 
loadBeadFromValuesManager(IItemRendererInitializer, "iItemRendererInitializer", 
_strand) as IItemRendererInitializer;
+            
+            return _itemRendererInitializer;
+        }
+        
         /**
-         *  The org.apache.royale.core.IItemRendererOwnerView that will
-         *  parent the item renderers.
+         *  @private
+         */
+        public function set 
itemRendererInitializer(value:IItemRendererInitializer):void
+        {
+            _itemRendererInitializer = value;
+        }
+                
+        /**
+         *  This Factory deletes all renderers, and generates a renderer
+         *  for every data provider item.
          *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
@@ -165,52 +188,51 @@ package org.apache.royale.html.beads
          *  @royaleignorecoercion org.apache.royale.html.beads.IListView
                 *  @royaleignorecoercion 
org.apache.royale.core.IListPresentationModel
                 *  @royaleignorecoercion org.apache.royale.core.UIBase
-                *  @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                *  @royaleignorecoercion org.apache.royale.core.IItemRenderer
+                *  @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRendererInitializer
                 *  @royaleignorecoercion 
org.apache.royale.html.supportClasses.DataItemRenderer
                 *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
          */            
                protected function dataProviderChangeHandler(event:Event):void
                {
-                       var dp:Array = dataProviderModel.dataProvider as Array;
+                       var dp:Object = dataProviderModel.dataProvider;
                        if (!dp)
                                return;
-                       
+                                   
             var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
                        var dataGroup:IItemRendererOwnerView = view.dataGroup;
                        
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-                       
-                       var n:int = dp.length; 
+            removeAllItemRenderers();
+            
+                       var n:int = dataProviderLength; 
                        for (var i:int = 0; i < n; i++)
                        {                               
-                               var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer;
+                               var ir:IItemRenderer = 
itemRendererFactory.createItemRenderer() as IItemRenderer;
+                //var dataItemRenderer:DataItemRenderer = ir as 
DataItemRenderer;
 
                                dataGroup.addItemRenderer(ir, false);
-                               ir.index = i;
-                               ir.labelField = labelField;
-                if (dataItemRenderer)
-                {
-                    dataItemRenderer.dataField = dataField;
-                }
-
-                               if (presentationModel) {
-                                       var style:SimpleCSSStyles = new 
SimpleCSSStyles();
-                                       style.marginBottom = 
presentationModel.separatorThickness;
-                                       UIBase(ir).style = style;
-                                       UIBase(ir).height = 
presentationModel.rowHeight;
-                                       UIBase(ir).percentWidth = 100;
-                               }
-                               ir.data = dp[i];
-                               
-                               var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = ir;
-                               sendEvent(this,newEvent);
+                var data:Object = getItemAt(i);
+                (itemRendererInitializer as 
IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, view, 
index);
+                               ir.data = data;                         
                        }
                        
                        sendStrandEvent(_strand,"itemsCreated");
                }
+        
+        protected function 
removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void
+        {
+            dataGroup.removeAllItemRenderers();            
+        }
+        
+        protected function get dataProviderLength():int
+        {
+            return 0;
+        }
+        
+        override protected function getItemAt(i):Object
+        {
+            return null;
+        }
+
        }
 }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
index d9e5141..2d8417d 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
@@ -19,14 +19,17 @@
 package org.apache.royale.html.beads
 {
        import org.apache.royale.core.IBead;
+       import org.apache.royale.core.IChild;
        import org.apache.royale.core.IDataProviderItemRendererMapper;
+       import org.apache.royale.core.IDataProviderModel;
        import org.apache.royale.core.IItemRendererClassFactory;
        import org.apache.royale.core.IItemRendererOwnerView;
+       import org.apache.royale.core.ILayoutHost;
        import org.apache.royale.core.IListPresentationModel;
+       import org.apache.royale.core.IParentIUIBase;
        import org.apache.royale.core.ISelectableItemRenderer;
-       import org.apache.royale.core.IDataProviderModel;
        import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IStrandWithModelView;
+       import org.apache.royale.core.IStrandWithModelView;
        import org.apache.royale.core.IUIBase;
        import org.apache.royale.core.SimpleCSSStyles;
        import org.apache.royale.core.UIBase;
@@ -36,18 +39,12 @@ package org.apache.royale.html.beads
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.events.ItemRendererEvent;
        import org.apache.royale.html.List;
-       
-    import org.apache.royale.html.beads.IListView;
-       import org.apache.royale.core.IChild;
-       import org.apache.royale.core.ILayoutHost;
-       import org.apache.royale.core.IParentIUIBase;
-    import org.apache.royale.html.supportClasses.DataItemRenderer;
+       import org.apache.royale.html.beads.IListView;
+       import org.apache.royale.html.supportClasses.DataItemRenderer;
        import org.apache.royale.utils.loadBeadFromValuesManager;
        import org.apache.royale.utils.sendEvent;
        import org.apache.royale.utils.sendStrandEvent;
 
-    
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-       
     /**
      *  The DataItemRendererFactoryForArrayData class reads an
      *  array of data and creates an item renderer for every
@@ -74,84 +71,9 @@ package org.apache.royale.html.beads
                {
                        super(target);
                }
-
-               protected var dataProviderModel:IDataProviderModel;
-               protected var dataFieldProvider:DataFieldProviderBead;
-               
-               protected var labelField:String;
-        protected var dataField:String;
-
-               private var _strand:IStrand;
-               
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.8
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-         */
-               public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(value).addEventListener("initComplete",finishSetup);
-               }
-               
-               /**
-                * @private
-                * @royaleignorecoercion 
org.apache.royale.core.IDataProviderModel
-                * @royaleignorecoercion 
org.apache.royale.core.IItemRendererClassFactory
-                * @royaleignorecoercion 
org.apache.royale.html.beads.DataFieldProviderBead
-                */
-               private function finishSetup(event:Event):void
-               {                       
-                       dataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-                       
dataProviderModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       labelField = dataProviderModel.labelField;
-
-            dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) 
as DataFieldProviderBead;
-                       if (dataFieldProvider)
-            {
-                dataField = dataFieldProvider.dataField;
-            }
-
-                       // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will 
-                       // already have been loaded by 
DataContainerBase.addedToParent function.
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;             
            
-                       
-                       dataProviderChangeHandler(null);
-               }
-               
-               private var _itemRendererFactory:IItemRendererClassFactory;
-               
-        /**
-         *  The org.apache.royale.core.IItemRendererClassFactory used 
-         *  to generate instances of item renderers.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.8
-                *  @royaleignorecoercion 
org.apache.royale.core.IItemRendererClassFactory
-         */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-                       
-                       return _itemRendererFactory;
-               }
-               
-        /**
-         *  @private
-         */
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-                       _itemRendererFactory = value;
-               }
                
+        private var dp:Array;
+        
         /**
          *  The org.apache.royale.core.IItemRendererOwnerView that will
          *  parent the item renderers.
@@ -161,56 +83,22 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.8
                 *  @royaleignorecoercion Array
-         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
-         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-                *  @royaleignorecoercion 
org.apache.royale.core.IListPresentationModel
-                *  @royaleignorecoercion org.apache.royale.core.UIBase
-                *  @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
-                *  @royaleignorecoercion 
org.apache.royale.html.supportClasses.DataItemRenderer
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
          */            
-               protected function dataProviderChangeHandler(event:Event):void
+               override protected function 
dataProviderChangeHandler(event:Event):void
                {
-                       var dp:Array = dataProviderModel.dataProvider as Array;
-                       if (!dp)
-                               return;
-                       
-            var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
-                       var dataGroup:IItemRendererOwnerView = view.dataGroup;
-                       
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-                       
-                       var n:int = dp.length; 
-                       for (var i:int = 0; i < n; i++)
-                       {                               
-                               var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer;
-
-                               dataGroup.addItemRenderer(ir, false);
-                               ir.index = i;
-                               ir.labelField = labelField;
-                if (dataItemRenderer)
-                {
-                    dataItemRenderer.dataField = dataField;
-                }
-
-                               if (presentationModel) {
-                                       var style:SimpleCSSStyles = new 
SimpleCSSStyles();
-                                       style.marginBottom = 
presentationModel.separatorThickness;
-                                       UIBase(ir).style = style;
-                                       UIBase(ir).height = 
presentationModel.rowHeight;
-                                       UIBase(ir).percentWidth = 100;
-                               }
-                               ir.data = dp[i];
-                               
-                               var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = ir;
-                               sendEvent(this,newEvent);
-                       }
-                       
-                       sendStrandEvent(_strand,"itemsCreated");
-               }
+                       dp = dataProviderModel.dataProvider as Array;
+            
+            super.dataProviderChangeHandler(event);
+        }
+        
+        override protected function get dataProviderLength():int
+        {
+            return dp.length;
+        }
+        
+        override protected function getItemAt(i):Object
+        {
+            return dp[i];
+        }
        }
 }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
index 5475487..4f64530 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
@@ -41,8 +41,6 @@ package org.apache.royale.html.beads
     import org.apache.royale.utils.sendEvent;
     import org.apache.royale.utils.sendStrandEvent;
        
-       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-       
     /**
      *  The DataItemRendererFactoryForArrayList class uses an ArrayList
         *  and creates an item renderer for every
@@ -55,7 +53,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-       public class DataItemRendererFactoryForArrayList extends 
EventDispatcher implements IBead, IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryForArrayList extends 
DataItemRendererFactoryBase
        {
         /**
          *  Constructor.
@@ -70,84 +68,6 @@ package org.apache.royale.html.beads
                        super(target);
                }
                
-               protected var dataProviderModel:IDataProviderModel;
-        protected var dataFieldProvider:DataFieldProviderBead;
-
-               protected var labelField:String;
-               protected var dataField:String;
-
-               protected var _strand:IStrand;
-               
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(_strand).addEventListener("initComplete", initComplete);
-               }
-               
-               protected function initComplete(event:Event):void
-               {                       
-                       dataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-                       
dataProviderModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       labelField = dataProviderModel.labelField;
-
-            dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) 
as DataFieldProviderBead;
-            if (dataFieldProvider)
-            {
-                dataField = dataFieldProvider.dataField;
-            }
-
-                       // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will 
-                       // already have been loaded by 
DataContainerBase.addedToParent function.
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;             
            
-                       
-                       dataProviderChangeHandler(null);
-               }
-               
-               private var _itemRendererFactory:IItemRendererClassFactory;
-               
-        /**
-         *  The org.apache.royale.core.IItemRendererClassFactory used 
-         *  to generate instances of item renderers.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-                       
-                       return _itemRendererFactory;
-               }
-               
-        /**
-         *  @private
-         */
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-                       _itemRendererFactory = value;
-               }
-               
-               /**
-                * @private
-                */
-               protected function setData(ir:ISelectableItemRenderer, 
data:Object, index:int):void
-               {
-                       ir.data = data;
-                       ir.index = index;
-               }
-               
                /**
                 *  @private
          *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
@@ -159,42 +79,7 @@ package org.apache.royale.html.beads
                        if (!dp)
                                return;
                        
-            var view:IListView = (_strand as IStrandWithModelView).view as 
IListView;
-                       var dataGroup:IItemRendererOwnerView = view.dataGroup;
-                       
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-                       
-                       var n:int = dp.length; 
-                       for (var i:int = 0; i < n; i++)
-                       {                               
-                               var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                               var dataItemRenderer:DataItemRenderer = ir as 
DataItemRenderer;
-
-                               dataGroup.addItemRenderer(ir, false);
-                               if (presentationModel) {
-                                       var style:SimpleCSSStyles = new 
SimpleCSSStyles();
-                                       style.marginBottom = 
presentationModel.separatorThickness;
-                                       UIBase(ir).style = style;
-                                       UIBase(ir).height = 
presentationModel.rowHeight;
-                                       UIBase(ir).percentWidth = 100;
-                               }
-
-                ir.labelField = labelField;
-                               if (dataItemRenderer)
-                               {
-                                       dataItemRenderer.dataField = dataField;
-                               }
-
-                               setData(ir, dp.getItemAt(i), i);
-
-                               var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
-                               newEvent.itemRenderer = ir;
-                               sendEvent(this,newEvent);
-                       }
-
-                       sendStrandEvent(_strand,"itemsCreated");
+            super.dataProviderChangeHandler(event);
                }
        }
 }
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 34ec62b..92efa26 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
@@ -44,112 +44,13 @@ package org.apache.royale.html.beads
        /**
         * This class creates itemRenderer instances from the data contained 
within an ICollectionView
         */
-       public class DataItemRendererFactoryForCollectionView extends 
EventDispatcher implements IBead, IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryForCollectionView extends 
DataItemRendererFactoryBase
        {
                public function 
DataItemRendererFactoryForCollectionView(target:Object = null)
                {
                        super(target);
                }
                
-               protected var _strand:IStrand;
-               
-               /**
-                *  @copy org.apache.royale.core.IBead#strand
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.8
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-                */
-               public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(value).addEventListener("initComplete", initComplete);
-               }
-               
-               /**
-                *  finish setup
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.8
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-                *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-                */
-               protected function initComplete(event:Event):void
-               {
-                       
IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
-                       
-                       var listView:IListView = 
_strand.getBeadByType(IListView) as IListView;
-                       dataGroup = listView.dataGroup;
-                       
-                       var model:IEventDispatcher = 
_strand.getBeadByType(IBeadModel) as IEventDispatcher;
-                       model.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       
-                       dataProviderChangeHandler(null);
-               }
-               
-               protected var _dataProviderModel:IDataProviderModel;
-               
-               /**
-                * The model holding the dataProvider.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.9
-                *  @royaleignorecoercion 
org.apache.royale.core.IDataProviderModel
-                */
-               public function get dataProviderModel():IDataProviderModel
-               {
-                       if (_dataProviderModel == null && _strand != null) {
-                               _dataProviderModel = 
_strand.getBeadByType(IBeadModel) as IDataProviderModel;
-                       }
-                       return _dataProviderModel;
-               }
-               
-               protected var labelField:String;
-               
-               private var _itemRendererFactory:IItemRendererClassFactory;
-               
-               /**
-                *  The org.apache.royale.core.IItemRendererClassFactory used
-                *  to generate instances of item renderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.8
-                *  @royaleignorecoercion 
org.apache.royale.core.IItemRendererClassFactory
-                */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       if(!_itemRendererFactory)
-                               _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-                       
-                       return _itemRendererFactory;
-               }
-               
-               /**
-                *  @private
-                */
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-                       _itemRendererFactory = value;
-               }
-               
-               /**
-                *  The org.apache.royale.core.IItemRendererOwnerView that will
-                *  parent the item renderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.8
-                */
-               protected var dataGroup:IItemRendererOwnerView;
                
                /**
                 * @private
@@ -172,20 +73,7 @@ package org.apache.royale.html.beads
                        dped.addEventListener(CollectionEvent.ITEM_REMOVED, 
itemRemovedHandler);
                        dped.addEventListener(CollectionEvent.ITEM_UPDATED, 
itemUpdatedHandler);
                        
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-                       labelField = dataProviderModel.labelField;
-                       
-                       var n:int = dp.length;
-                       for (var i:int = 0; i < n; i++)
-                       {
-                               var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                               var item:Object = dp.getItemAt(i);
-                               fillRenderer(i, item, ir, presentationModel);
-                       }
-                       
-                       IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
+            super.dataProviderChangeHandler(event);
                }
                
                /**
@@ -281,37 +169,5 @@ package org.apache.royale.html.beads
                        setData(ir, event.item, event.index);
                }
                
-               /**
-                * @private
-                * @royaleignorecoercion org.apache.royale.core.UIBase
-                */
-               protected function fillRenderer(index:int,
-                                                                               
item:Object,
-                                                                               
itemRenderer:ISelectableItemRenderer,
-                                                                               
presentationModel:IListPresentationModel):void
-               {
-                       dataGroup.addItemRendererAt(itemRenderer, index);
-                       
-                       itemRenderer.labelField = labelField;
-                       
-                       if (presentationModel) {
-                               var style:SimpleCSSStyles = new 
SimpleCSSStyles();
-                               style.marginBottom = 
presentationModel.separatorThickness;
-                               UIBase(itemRenderer).style = style;
-                               UIBase(itemRenderer).height = 
presentationModel.rowHeight;
-                               UIBase(itemRenderer).percentWidth = 100;
-                       }
-                       
-                       setData(itemRenderer, item, index);
-               }
-               
-               /**
-                * @private
-                */
-               protected function 
setData(itemRenderer:ISelectableItemRenderer, data:Object, index:int):void
-               {
-                       itemRenderer.index = index;
-                       itemRenderer.data = data;
-               }
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
index b2eaafc..150f470 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForColumnData.as
@@ -44,7 +44,7 @@ package org.apache.royale.html.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.0
         */
-       public class DataItemRendererFactoryForColumnData extends Bead 
implements IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryForColumnData extends 
DataItemRendererFactoryBase
        {
                /**
                 *  constructor.
@@ -60,70 +60,7 @@ package org.apache.royale.html.beads
                
                private var selectionModel:IDataGridModel;
                                
-               /**
-                *  @copy org.apache.royale.core.IBead#strand
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       listenOnStrand("initComplete",finishSetup);
-               }
-               
-               /**
-                * @private
-     * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory
-                */
-               private function finishSetup(event:Event):void
-               {                       
-                       selectionModel = _strand.getBeadByType(IDataGridModel) 
as IDataGridModel;
-                       selectionModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       
-                       // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will 
-                       // already have been loaded by 
DataContainerBase.addedToParent function.
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-                       
-                       dataProviderChangeHandler(null);
-               }
-               
-               private var _itemRendererFactory:IItemRendererClassFactory;
-               
-               /**
-                *  The factory used to create the itemRenderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-     * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory
-                */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       if(!_itemRendererFactory)
-                       _itemRendererFactory = 
loadBeadFromValuesManager(IItemRendererClassFactory, 
"iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-                       
-                       return _itemRendererFactory
-               }
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-                       _itemRendererFactory = value;
-               }
-               
-               /**
-                *  The dataGroup that is the pareent for the itemRenderers
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-//             protected var dataGroup:IItemRendererOwnerView;
-               
+
                /**
                 * @private
          * @royaleignorecoercion 
org.apache.royale.html.beads.DataGridColumnView
@@ -138,20 +75,7 @@ package org.apache.royale.html.beads
                        var view:DataGridColumnView = 
_strand.getBeadByType(IBeadView) as DataGridColumnView;
                        if (view == null) return;
 
-                       var dataGroup:IItemRendererOwnerView = view.dataGroup;
-                       dataGroup.removeAllItemRenderers();
-
-                       var n:int = dp.length; 
-                       for (var i:int = 0; i < n; i++)
-                       {
-                               var tf:DataItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as DataItemRenderer;
-                               dataGroup.addItemRenderer(tf, false);
-                               tf.index = i;
-                               tf.labelField = view.column.dataField;
-                               tf.data = dp[i];
-                       }
-                       
-                       sendStrandEvent(_strand,"itemsCreated");
+            super.dataProviderChangeHandler(event);
                }
        }
 }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as
index 9146f39..1554964 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForHierarchicalData.as
@@ -41,8 +41,6 @@ package org.apache.royale.html.beads
        import org.apache.royale.html.List;
        import org.apache.royale.html.supportClasses.TreeListData;
        
-       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a
      *  HierarchicalData object and creates an item renderer for every
@@ -70,23 +68,6 @@ package org.apache.royale.html.beads
                        super();
                }
 
-               private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
-                       super.strand = value;
-               }
-               
                /**
                 * Sets the itemRenderer's data with additional tree-related 
data.
          *
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
new file mode 100644
index 0000000..5c8afe6
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
@@ -0,0 +1,108 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.html.beads
+{      
+       import spark.components.IItemRendererOwner;
+       
+       import org.apache.royale.core.Bead;
+       import org.apache.royale.core.IDataProviderModel;
+       import org.apache.royale.core.IIndexedItemRenderer;
+       import org.apache.royale.core.IIndexedItemRendererInitializer;
+       import org.apache.royale.core.IItemRenderer;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.core.UIBase;
+
+       /**
+        *  The ListItemRendererInitializer class initializes item renderers
+     *  in list classes.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.0
+        */
+       public class ListItemRendererInitializer extends Bead implements 
IIndexedItemRendererInitializer
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function ListItemRendererInitializer()
+               {
+               }
+               
+        private var presentationModel:IListPresentationModel;
+        
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                *  @royaleignorecoercion HTMLInputElement
+                *  @royaleignorecoercion org.apache.royale.core.UIBase;
+                */
+               override public function set strand(value:IStrand):void
+               {       
+                       _strand = value;
+            var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;        
    
+            dataProviderModel = _strand.getBeadByType(IDataProviderModel) as 
IDataProviderModel;
+            dataProviderModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
+            labelField = dataProviderModel.labelField;            
+               }
+               
+               /**
+                *  @private
+                *  @royaleignorecoercion 
org.apache.royale.core.HTMLElementWrapper
+                */
+               public function initializeItemRenderer(ir:IIndexedItemRenderer, 
data:Object, ownerView:IItemRendererOwnerView, index:int):void
+               {
+            ir.labelField = labelField;
+            ir.itemRendererOwnerView = ownerView;
+            
+            setupVisualsForItemRenderer(ir);
+        }
+        
+        /**
+         *  @private
+         *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
+         */
+        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, 
data:Object, ownerView:IItemRendererOwnerView, index:int):void
+        {
+            ir.index = index;
+            initializeItemRenderer(ir, data, ownerView);
+        }
+        
+        protected function 
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+        {
+            var style:SimpleCSSStyles = new SimpleCSSStyles();
+            style.marginBottom = presentationModel.separatorThickness;
+            UIBase(ir).style = style;
+            UIBase(ir).height = presentationModel.rowHeight;
+            UIBase(ir).percentWidth = 100;
+               }
+
+       }
+}
diff --git 
a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
 
b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
index ee7a9bf..89d0bcd 100644
--- 
a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
+++ 
b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
@@ -41,7 +41,7 @@ package org.apache.royale.charts.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.0
         */
-       public class DataItemRendererFactoryForSeriesArrayListData implements 
IBead, IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryForSeriesArrayListData extends 
DataItemRendererFactoryForSeriesData
        {
                /**
                 *  constructor.
@@ -53,47 +53,14 @@ package org.apache.royale.charts.beads
                 */
                public function DataItemRendererFactoryForSeriesArrayListData()
                {
+            factory =  new ChartItemRendererFactory(this);
+            itemRendererClassFactory = factory;
                }
                
-               private var _strand:IStrand;
-               
-               /**
-                *  @copy org.apache.royale.core.IBead#strand
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(_strand).addEventListener("initComplete", initComplete);
-               }
-               public function get strand():IStrand
-               {
-                       return _strand;
-               }
-               
-               private function initComplete(event:Event):void
-               {
-                       var selectionModel:ISelectionModel = 
_strand.getBeadByType(ISelectionModel) as ISelectionModel;
-                       selectionModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       
-                       dataProviderChangeHandler(null);
-               }
-               
-               /**
-                * For series data, the 'global' itemRendererFactory is not 
used. Each series supplies
-                * its own itemRendererFactory.
-                */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       return null;
-               }
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-               }
+        private var factory:IItemRendererClassFactory;
+        private var chart:IChart;
+        private var series:Array;
+        private var dp:ArrayList;
                
                /**
                 * @private
@@ -105,43 +72,16 @@ package org.apache.royale.charts.beads
                 * @royaleignorecoercion 
org.apache.royale.charts.core.IChartSeries
                 * @royaleemitcoercion org.apache.royale.collections.ArrayList
                 */
-               private function dataProviderChangeHandler(event:Event):void
+               override protected function 
dataProviderChangeHandler(event:Event):void
                {
-                       var selectionModel:ISelectionModel = 
_strand.getBeadByType(ISelectionModel) as ISelectionModel;
-                       var dp:ArrayList = selectionModel.dataProvider as 
ArrayList;
-                       if (!dp)
-                               return;
-                       
-                       var listView:IListView = 
_strand.getBeadByType(IListView) as IListView;
-                       var dataGroup:IChartDataGroup = listView.dataGroup as 
IChartDataGroup;
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var chart:IChart = _strand as IChart;
-                       var series:Array = chart.series;
-                                               
-                       for (var s:int=0; s < series.length; s++)
-                       {                               
-                               var n:int = dp.length; 
-                               var chartSeries:IChartSeries = series[s] as 
IChartSeries;
-                               
-                               for (var i:int = 0; i < n; i++)
-                               {
-                                       if (chartSeries.itemRenderer)
-                                       {
-                                               var ir:IChartItemRenderer = 
chartSeries.itemRenderer.newInstance() as IChartItemRenderer;
-                                               dataGroup.addItemRenderer(ir, 
false);
-                                               ir.itemRendererOwnerView = 
dataGroup;
-                                               ir.index = i;
-                                               ir.data = dp.getItemAt(i)
-                                               ir.series = chartSeries;
-                                       }
-                               }
-                               
-                       }
-                       
-                       IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
-                       //TODO (Harbs) I think layoutNeeded is always 
dispatched when itemsCreated is handled.
-                       IEventDispatcher(_strand).dispatchEvent(new 
Event("layoutNeeded"));
-               }
-       }
+            dp = selectionModel.dataProvider as ArrayList;
+            super.dataProviderChangeHandler(event);
+        }
+                
+        override protected function getItemAt(index:int):Object
+        {
+            return dp.getItemAt(index);
+        }
+    }
 }
+
diff --git 
a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
 
b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
index 6eb4bc0..4bae6f0 100644
--- 
a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
+++ 
b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
@@ -40,7 +40,7 @@ package org.apache.royale.charts.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.0
         */
-       public class DataItemRendererFactoryForSeriesData implements IBead, 
IDataProviderItemRendererMapper
+       public class DataItemRendererFactoryForSeriesData extends 
DataItemRendererFactoryBase
        {
                /**
                 *  constructor.
@@ -52,81 +52,132 @@ package org.apache.royale.charts.beads
                 */
                public function DataItemRendererFactoryForSeriesData()
                {
+            factory =  new ChartItemRendererFactory(this);
+            itemRendererClassFactory = factory;
                }
                
-               private var _strand:IStrand;
-               
-               /**
-                *  @copy org.apache.royale.core.IBead#strand
-                *  
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       var selectionModel:ISelectionModel = 
value.getBeadByType(ISelectionModel) as ISelectionModel;
-                       selectionModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-                       
-                       dataProviderChangeHandler(null);
-               }
-               public function get strand():IStrand
-               {
-                       return _strand;
-               }
-               
-               /**
-                * For series data, the 'global' itemRendererFactory is not 
used. Each series supplies
-                * its own itemRendererFactory.
-                */
-               public function get 
itemRendererFactory():IItemRendererClassFactory
-               {
-                       return null;
-               }
-               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
-               {
-               }
-               
-               /**
-                * @private
-                */
-               private function dataProviderChangeHandler(event:Event):void
-               {
-                       var selectionModel:ISelectionModel = 
_strand.getBeadByType(ISelectionModel) as ISelectionModel;
-                       var dp:Array = selectionModel.dataProvider as Array;
-                       if (!dp)
-                               return;
-                       
-                       var listView:IListView = 
_strand.getBeadByType(IListView) as IListView;
-                       var dataGroup:IChartDataGroup = listView.dataGroup as 
IChartDataGroup;
-                       dataGroup.removeAllItemRenderers();
-                       
-                       var chart:IChart = _strand as IChart;
-                       var series:Array = chart.series;
-                                               
-                       for (var s:int=0; s < series.length; s++)
-                       {                               
-                               var n:int = dp.length; 
-                               var chartSeries:IChartSeries = series[s] as 
IChartSeries;
-                               
-                               for (var i:int = 0; i < n; i++)
-                               {
-                                       if (chartSeries.itemRenderer)
-                                       {
-                                               var ir:IChartItemRenderer = 
chartSeries.itemRenderer.newInstance() as IChartItemRenderer;
-                                               dataGroup.addItemRenderer(ir, 
false);
-                                               ir.itemRendererOwnerView = 
dataGroup;
-                                               ir.index = i;
-                                               ir.data = dp[i];
-                                               ir.series = chartSeries;
-                                       }
-                               }
-                               
-                       }
-                       
-                       IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
-               }
-       }
+        private var factory:IItemRendererClassFactory;
+        private var chart:IChart;
+        private var series:Array;
+        private var dp:Array;
+        
+        override public function set strand(value:IStrand):void
+        {
+            super.strand = value;
+            value.addBead(new ChartItemRendererInitializer(this))
+        }
+        
+        public var chartSeries:IChartSeries;
+        
+        /**
+         * @private
+         * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+         * @royaleignorecoercion org.apache.royale.html.beads.IListView
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         * @royaleignorecoercion org.apache.royale.charts.core.IChartDataGroup
+         * @royaleignorecoercion 
org.apache.royale.charts.core.IChartItemRenderer
+         * @royaleignorecoercion org.apache.royale.charts.core.IChartSeries
+         * @royaleemitcoercion org.apache.royale.collections.Array
+         */
+        override protected function dataProviderChangeHandler(event:Event):void
+        {
+            dp = selectionModel.dataProvider as Array;
+            chart = _strand as IChart;
+            series = chart.series;
+            
+            var listView:IListView = _strand.getBeadByType(IListView) as 
IListView;
+            var dataGroup:IChartDataGroup = listView.dataGroup as 
IChartDataGroup;
+            
+            for (var s:int=0; s < series.length; s++)
+            {                          
+                var n:int = dp.length; 
+                chartSeries = series[s] as IChartSeries;
+                if (chartSeries.itemRenderer)
+                    super.dataProviderChangeHandler(event);
+            }
+        }
+        
+        override protected function removeAllItemRenderers():void
+        {
+            // do nothing.  We don't want to remove the renderers
+            // between each series, we removed them all ourselves
+            // earlier.
+        }
+        
+        override protected function get dataProviderLength():int
+        {
+            return series.length;
+        }
+        
+        override protected function getItemAt(index:int):Object
+        {
+            return dp[index];
+        }
+    }
 }
+
+import org.apache.royale.charts.beads.DataItemRendererFactoryForSeriesData;
+import org.apache.royale.core.IDataProviderModel;
+import org.apache.royale.core.UIBase;
+
+class ChartItemRendererFactory extends ItemRendererClassFactory
+{
+    private var owner:DataItemRendererFactoryForSeriesData;
+    
+    public function 
ChartItemRendererFactory(ref:DataItemRendererFactoryForSeriesData)
+    {
+        owner = ref;
+        createFunction = createChartSeriesRenderer;
+    }
+    
+    private function createChartSeriesRenderer():IItemRenderer
+    {
+        var ir:IChartItemRenderer = 
owner.chartSeries.itemRenderer.newInstance() as IChartItemRenderer;
+        return ir;
+    }
+}
+
+class ChartItemRendererInitializer extends Bead implements 
IIndexedItemRendererInitializer             
+{
+    private var owner:DataItemRendererFactoryForSeriesData;
+    
+    public function 
ChartItemRendererInitializer(ref:DataItemRendererFactoryForSeriesData)
+    {
+        owner = ref;    
+    }
+    
+    /**
+     *  @copy org.apache.royale.core.IBead#strand
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     *  @royaleignorecoercion HTMLInputElement
+     *  @royaleignorecoercion org.apache.royale.core.UIBase;
+     */
+    override public function set strand(value:IStrand):void
+    {  
+        _strand = value;
+    }
+    
+    /**
+     *  @private
+     *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
+     */
+    public function initializeItemRenderer(ir:IIndexedItemRenderer, 
data:Object, ownerView:IItemRendererOwnerView, index:int):void
+    {
+        ir.itemRendererOwnerView = ownerView;
+    }
+    
+    /**
+     *  @private
+     *  @royaleignorecoercion org.apache.royale.core.IChartItemRenderer
+     */
+    public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, 
data:Object, ownerView:IItemRendererOwnerView, index:int):void
+    {
+        (ir as IChartItemRenderer).series = owner.chartSeries;
+        ir.index = index;
+        initializeItemRenderer(ir, data, ownerView);
+    }        
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as
similarity index 56%
copy from 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
copy to 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as
index 90fadee..ffa19fc 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRenderer.as
@@ -21,49 +21,25 @@ package org.apache.royale.core
        import org.apache.royale.events.IEventDispatcher;
 
     /**
-     *  The IItemRenderer interface is the basic interface for item renderers.
-     *  More complex item renderers may implements extensions of this 
interface.
+     *  The IIndexedItemRenderer interface is the basic interface for item 
renderers
+     *  that have an index property that indicates its index in the list of 
renderers.
      *  
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-       public interface IItemRenderer extends IEventDispatcher, IChild
+       public interface IIndexedItemRenderer extends IItemRenderer
        {
         /**
-         *  The data item to be displayed by the item renderer.
+         *  The index of the item renderer.
          * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-               function get data():Object;
-               function set data(value:Object):void;
-               
-               /**
-                * Additional data about the list structure that might be useful
-                * to itemRenderer implementations.
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-                */
-               function get listData():Object;
-               function set listData(value:Object):void;
-               
-               /**
-                *  The parent component of the itemRenderer instance. This is 
the container that houses
-                *  all of the itemRenderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               function get itemRendererOwnerView():Object;
-               function set itemRendererOwnerView(value:Object):void;
+               function get index():int;
+               function set index(value:int):void;             
        }
 }
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
similarity index 54%
copy from 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
copy to 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
index 90fadee..0de54f3 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
@@ -18,52 +18,36 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
-       import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.core.IItemRendererOwnerView;
 
     /**
-     *  The IItemRenderer interface is the basic interface for item renderers.
-     *  More complex item renderers may implements extensions of this 
interface.
-     *  
+     *  The IItemRendererInitializer interface is the basic interface for beads
+     *  that initialize properties on an IItemRenderer.  Simple implementations
+     *  only assign the data and itemRendererOwnerView property, but others 
will 
+     *  assign other properties if needed. 
+     * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-       public interface IItemRenderer extends IEventDispatcher, IChild
+       public interface IIndexedItemRendererInitializer extends 
IItemRendererInitializer
        {
         /**
-         *  The data item to be displayed by the item renderer.
+         *  This method is called to generate another instance of an item 
renderer.
          * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               function get data():Object;
-               function set data(value:Object):void;
-               
-               /**
-                * Additional data about the list structure that might be useful
-                * to itemRenderer implementations.
+         *  @param renderer The renderer
+         *  @param data The data for the renderer
+         *  @param ownerView the view of the component that owns the renderers
+         *  @param index the index in the list of renderers
+         * 
+         *  @see org.apache.royale.core.IItemRenderer
          * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
-                */
-               function get listData():Object;
-               function set listData(value:Object):void;
-               
-               /**
-                *  The parent component of the itemRenderer instance. This is 
the container that houses
-                *  all of the itemRenderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               function get itemRendererOwnerView():Object;
-               function set itemRendererOwnerView(value:Object):void;
+         */
+               function 
initializeIndexedItemRenderer(renderer:IIndexedItemRenderer, data:Object, 
ownerView:IItemRendererOwnerView, index:int):void;
        }
 }
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
index 90fadee..c793b6c 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
@@ -43,18 +43,6 @@ package org.apache.royale.core
                function set data(value:Object):void;
                
                /**
-                * Additional data about the list structure that might be useful
-                * to itemRenderer implementations.
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-                */
-               function get listData():Object;
-               function set listData(value:Object):void;
-               
-               /**
                 *  The parent component of the itemRenderer instance. This is 
the container that houses
                 *  all of the itemRenderers.
                 *
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as
index 84918e8..7a59697 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererClassFactory.as
@@ -39,15 +39,11 @@ package org.apache.royale.core
      */
        public interface IItemRendererClassFactory extends IBead
        {
-        // TODO: add additional parameters like the data item and index
         /**
-         *  This method is called to generate another instance of an item 
renderer
-         *  and attach it to the given parent.
+         *  This method is called to generate another instance of an item 
renderer.
          * 
-         *  @param parent The parent of the item renderer.
          *  @return The item renderer.
          * 
-         *  @see org.apache.royale.core.IItemRendererOwnerView
          *  @see org.apache.royale.core.IItemRenderer
          * 
          *  @langversion 3.0
@@ -55,6 +51,6 @@ package org.apache.royale.core
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-               function 
createItemRenderer(parent:IItemRendererOwnerView):IItemRenderer;
+               function createItemRenderer():IItemRenderer;
        }
 }
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
similarity index 54%
copy from 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
copy to 
frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
index 90fadee..0c056d9 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
@@ -18,52 +18,39 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
-       import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.core.IItemRendererOwnerView;
 
     /**
-     *  The IItemRenderer interface is the basic interface for item renderers.
-     *  More complex item renderers may implements extensions of this 
interface.
-     *  
+     *  The IItemRendererInitializer interface is the basic interface for beads
+     *  that initialize properties on an IItemRenderer.  Simple implementations
+     *  only assign the itemRendererOwnerView property, but others will 
+     *  assign other properties if needed.
+     * 
+     *  The implementations do not assign the data property.  The 
Factory/Mapper
+     *  will assign data as the last property, after parenting, in order to
+     *  trigger any data-bindings once.
+     * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-       public interface IItemRenderer extends IEventDispatcher, IChild
+       public interface IItemRendererInitializer extends IBead
        {
         /**
-         *  The data item to be displayed by the item renderer.
+         *  This method is called to generate another instance of an item 
renderer.
          * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               function get data():Object;
-               function set data(value:Object):void;
-               
-               /**
-                * Additional data about the list structure that might be useful
-                * to itemRenderer implementations.
+         *  @param renderer The renderer
+         *  @param data The data for the renderer
+         *  @param ownerView the view of the component that owns the renderers
+         * 
+         *  @see org.apache.royale.core.IItemRenderer
          * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
-                */
-               function get listData():Object;
-               function set listData(value:Object):void;
-               
-               /**
-                *  The parent component of the itemRenderer instance. This is 
the container that houses
-                *  all of the itemRenderers.
-                *
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.0
-                */
-               function get itemRendererOwnerView():Object;
-               function set itemRendererOwnerView(value:Object):void;
+         */
+               function initializeItemRenderer(renderer:IItemRenderer, 
data:Object, ownerView:IItemRendererOwnerView):void;
        }
 }
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
index ac6133b..edfbd85 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
@@ -122,9 +122,9 @@ package org.apache.royale.core
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-        public function 
createItemRenderer(parent:IItemRendererOwnerView):IItemRenderer
+        public function createItemRenderer():IItemRenderer
         {
-            return createFunction(parent);
+            return createFunction();
         }
         
         /**
@@ -153,9 +153,9 @@ package org.apache.royale.core
          *  @productversion Royale 0.0
          *  @royaleignorecoercion org.apache.royale.core.IParent
          */
-        protected function 
createFromMXMLContent(parent:IItemRendererOwnerView):IItemRenderer
+        protected function createFromMXMLContent():IItemRenderer
         {
-            return MXMLDataInterpreter.generateMXMLArray(document, parent as 
IParent, MXMLDescriptor)[0];
+            return MXMLDataInterpreter.generateMXMLArray(document, null, 
MXMLDescriptor)[0];
         }
         
         /**
@@ -179,10 +179,9 @@ package org.apache.royale.core
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-        public function 
createFromClass(parent:IItemRendererOwnerView):IItemRenderer
+        public function createFromClass():IItemRenderer
         {
             var renderer:IItemRenderer = itemRendererFactory.newInstance();
-                       renderer.itemRendererOwnerView = parent;
             return renderer;
         }
         
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
index 08f99b8..fbbdf5f 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
@@ -53,8 +53,6 @@ package mx.controls.advancedDataGridClasses
        import org.apache.royale.html.supportClasses.DataItemRenderer;
        import org.apache.royale.html.supportClasses.TreeListData;
        
-       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a
      *  HierarchicalData object and creates an item renderer for every
@@ -82,23 +80,6 @@ package mx.controls.advancedDataGridClasses
                        super();
                }
 
-               private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
-                       super.strand = value;
-               }
-        
         /**
          * @private
          * @royaleignorecoercion mx.collections.ICollectionView
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
index e08ae4e..7e4cf4b 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
@@ -19,33 +19,31 @@
 package mx.controls.listClasses
 {
     import mx.collections.ArrayCollection;
-       import mx.collections.ICollectionView;
-       import mx.collections.IViewCursor;
+    import mx.collections.ICollectionView;
+    import mx.collections.IViewCursor;
+    
+    import org.apache.royale.core.IBead;
+    import org.apache.royale.core.IBeadModel;
+    import org.apache.royale.core.IDataProviderItemRendererMapper;
+    import org.apache.royale.core.IDataProviderModel;
+    import org.apache.royale.core.IItemRendererClassFactory;
+    import org.apache.royale.core.IItemRendererOwnerView;
+    import org.apache.royale.core.IListPresentationModel;
+    import org.apache.royale.core.ISelectableItemRenderer;
+    import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.core.SimpleCSSStyles;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.core.ValuesManager;
+    import org.apache.royale.events.CollectionEvent;
+    import org.apache.royale.events.Event;
+    import org.apache.royale.events.EventDispatcher;
+    import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.events.ItemRendererEvent;
+    import org.apache.royale.html.List;
+    import 
org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
+    import org.apache.royale.html.supportClasses.TreeListData;
        
-       import org.apache.royale.core.IBead;
-       import org.apache.royale.core.IBeadModel;
-       import org.apache.royale.core.IDataProviderItemRendererMapper;
-       import org.apache.royale.core.IDataProviderModel;
-       import org.apache.royale.core.IItemRendererClassFactory;
-       import org.apache.royale.core.IItemRendererOwnerView;
-       import org.apache.royale.core.IListPresentationModel;
-       import org.apache.royale.core.ISelectableItemRenderer;
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.core.IUIBase;
-       import org.apache.royale.core.SimpleCSSStyles;
-       import org.apache.royale.core.UIBase;
-       import org.apache.royale.core.ValuesManager;
-       import org.apache.royale.events.CollectionEvent;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.EventDispatcher;
-       import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.events.ItemRendererEvent;
-       import org.apache.royale.html.List;
-       import 
org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
-       import org.apache.royale.html.supportClasses.TreeListData;
-       
-       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a
      *  HierarchicalData object and creates an item renderer for every
@@ -73,6 +71,8 @@ package mx.controls.listClasses
                        super();
                }
         
+        private var dp:ICollectionView;
+        
         /**
          * @private
          * @royaleignorecoercion org.apache.royale.core.IListPresentationModel
@@ -83,7 +83,7 @@ package mx.controls.listClasses
         {
             if (!dataProviderModel)
                 return;
-            var dp:ICollectionView = dataProviderModel.dataProvider as 
ICollectionView;
+            dp = dataProviderModel.dataProvider as ICollectionView;
             if (!dp)
             {
                 // temporary until descriptor is used in MenuBarModel
@@ -102,13 +102,14 @@ package mx.controls.listClasses
             dped.addEventListener(CollectionEvent.ITEM_REMOVED, 
itemRemovedHandler);
             dped.addEventListener(CollectionEvent.ITEM_UPDATED, 
itemUpdatedHandler);
             
+            super.dataProviderChangeHandler(event);
+            
             dataGroup.removeAllItemRenderers();
             
             var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
             labelField = dataProviderModel.labelField;
             
             var n:int = dp.length;
-            var cursor:IViewCursor = dp.createCursor();
             for (var i:int = 0; i < n; i++)
             {
                 var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
@@ -120,5 +121,22 @@ package mx.controls.listClasses
             IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
         }
                
+        private var cursor:IViewCursor;
+        
+        
+        // assumes will be called in a loop, not random access
+        override protected function dataProviderLength():int
+        {
+            cursor = dp.createCursor();
+            return dp.length;
+        }
+        
+        // assumes will be called in a loop, not random access
+        override protected function getItemAt(index:int):Object
+        {
+            var obj:Object = cursor.current;
+            cursor.moveNext();
+            return obj;
+        }
        }
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as
index f1d3286..b6409cc 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as
@@ -19,32 +19,30 @@
 package mx.controls.listClasses
 {
     import mx.collections.ArrayList;
-       import mx.collections.IList;
+    import mx.collections.IList;
+    
+    import org.apache.royale.core.IBead;
+    import org.apache.royale.core.IBeadModel;
+    import org.apache.royale.core.IDataProviderItemRendererMapper;
+    import org.apache.royale.core.IDataProviderModel;
+    import org.apache.royale.core.IItemRendererClassFactory;
+    import org.apache.royale.core.IItemRendererOwnerView;
+    import org.apache.royale.core.IListPresentationModel;
+    import org.apache.royale.core.ISelectableItemRenderer;
+    import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.core.SimpleCSSStyles;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.core.ValuesManager;
+    import org.apache.royale.events.CollectionEvent;
+    import org.apache.royale.events.Event;
+    import org.apache.royale.events.EventDispatcher;
+    import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.events.ItemRendererEvent;
+    import org.apache.royale.html.List;
+    import 
org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
+    import org.apache.royale.html.supportClasses.TreeListData;
        
-       import org.apache.royale.core.IBead;
-       import org.apache.royale.core.IBeadModel;
-       import org.apache.royale.core.IDataProviderItemRendererMapper;
-       import org.apache.royale.core.IDataProviderModel;
-       import org.apache.royale.core.IItemRendererClassFactory;
-       import org.apache.royale.core.IItemRendererOwnerView;
-       import org.apache.royale.core.IListPresentationModel;
-       import org.apache.royale.core.ISelectableItemRenderer;
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.core.IUIBase;
-       import org.apache.royale.core.SimpleCSSStyles;
-       import org.apache.royale.core.UIBase;
-       import org.apache.royale.core.ValuesManager;
-       import org.apache.royale.events.CollectionEvent;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.EventDispatcher;
-       import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.events.ItemRendererEvent;
-       import org.apache.royale.html.List;
-       import 
org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
-       import org.apache.royale.html.supportClasses.TreeListData;
-       
-       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a
      *  HierarchicalData object and creates an item renderer for every
@@ -101,20 +99,18 @@ package mx.controls.listClasses
             dped.addEventListener(CollectionEvent.ITEM_REMOVED, 
itemRemovedHandler);
             dped.addEventListener(CollectionEvent.ITEM_UPDATED, 
itemUpdatedHandler);
             
-            dataGroup.removeAllItemRenderers();
-            
-            var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-            labelField = dataProviderModel.labelField;
-            
-            var n:int = dp.length;
-            for (var i:int = 0; i < n; i++)
-            {
-                var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                var item:Object = dp.getItemAt(i);
-                fillRenderer(i, item, ir, presentationModel);
-            }
+            super.dataProviderChangeHandler(event);
             
-            IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
+        }
+        
+        override protected function dataProviderLength():int
+        {
+            return dp.length;
+        }
+        
+        override protected function getItemAt(index:int):Object
+        {
+            return dp.getItemAt(index);
         }
                
        }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
index c6e172d..2d035e2 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/DataItemRendererFactoryForICollectionViewHierarchicalData.as
@@ -75,23 +75,6 @@ package mx.controls.treeClasses
                        super();
                }
 
-               private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
-                       super.strand = value;
-               }
-        
         /**
          * @private
          * @royaleignorecoercion mx.collections.ICollectionView
@@ -113,22 +96,7 @@ package mx.controls.treeClasses
             dped.addEventListener(CollectionEvent.ITEM_REMOVED, 
itemRemovedHandler);
             dped.addEventListener(CollectionEvent.ITEM_UPDATED, 
itemUpdatedHandler);
             
-            dataGroup.removeAllItemRenderers();
-            
-            var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-            labelField = dataProviderModel.labelField;
-            
-            var n:int = dp.length;
-            var cursor:IViewCursor = dp.createCursor();
-            for (var i:int = 0; i < n; i++)
-            {
-                var ir:ISelectableItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-                var item:Object = cursor.current;
-                cursor.moveNext();
-                fillRenderer(i, item, ir, presentationModel);
-            }
-            
-            IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
+            super.dataProviderChangeHandler(event);
         }
 
                

Reply via email to