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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 4a464d2  Fix a problem where changing a dataprovider, but continue 
adding items to it, makes the component continue adding items. beads must 
remove listeners before assign the new dp
4a464d2 is described below

commit 4a464d238a3aaef3deaa3438e2d134f35e0910b8
Author: Carlos Rovira <[email protected]>
AuthorDate: Thu Aug 23 21:55:16 2018 +0200

    Fix a problem where changing a dataprovider, but continue adding items to 
it, makes the component continue adding items. beads must remove listeners 
before assign the new dp
---
 .../JewelExample/src/main/royale/TablePlayGround.mxml       | 12 ++++--------
 .../JewelExample/src/main/royale/models/TablesModel.as      |  1 +
 .../itemRenderers/AddTableItemRendererForArrayListData.as   |  7 ++++++-
 .../TableItemRendererFactoryForCollectionView.as            | 13 ++++++++++---
 4 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml 
b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
index 6dd838a..b873dfc 100644
--- a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
+++ b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
@@ -175,16 +175,12 @@ limitations under the License.
        <j:Card >
                <html:H3 text="Jewel Table"/>
 
-               <j:Table id="table" width="440" change="onChange(event)">
+               <j:Table id="table" width="440" change="onChange(event)" 
dataProvider="{tablesModel.guitarrists}">
                        <j:TableColumn dataField="icon" label="" align="center" 
itemRenderer="itemRenderers.TableCellCloseIconItemRenderer"/>
                        <j:TableColumn dataField="guitarrist" 
label="Guitarrist"/>
                        <j:TableColumn dataField="album" label="Album" 
align="center" columnLabelAlign="center"/>
                        <j:TableColumn dataField="year" label="Release Year" 
align="right" columnLabelAlign="right"/>
-                                                       <!--item renderers can 
be get from CSS or declared in column but must extend TableItemRenderer -->
                        <j:beads>
-                               <js:ConstantBinding sourceID="tablesModel"
-                                                                       
sourcePropertyName="guitarrists"
-                                                                       
destinationPropertyName="dataProvider" />
                                <j:AddTableItemRendererForArrayListData/>
                                <j:DynamicRemoveItemRendererForArrayListData/>
                                <j:DynamicUpdateItemRendererForArrayListData/>
@@ -194,7 +190,7 @@ limitations under the License.
 
                <j:Label id="selected"/>
                <j:ControlBar>
-                       <j:Button click="clearTable()" text="Change Data" 
emphasis="primary"/>
+                       <j:Button click="changeTableData()" text="Change Data" 
emphasis="primary"/>
                        <j:Button text="Add item" click="addItem()"/>
                        <j:Button text="Remove first item" 
click="removeItemAt()"/>
                        <j:Button text="Update first item" 
click="updateFirstItem()"/>
@@ -212,7 +208,7 @@ limitations under the License.
                 selected.text = "Selected: " + table.selectedItemProperty;
             }
 
-                       private function clearTable():void
+                       private function changeTableData():void
                        {
                                table.dataProvider = new ArrayList([
                                        {icon: MaterialIconType.CLOSE, 
guitarrist: "Ssi", album: "Paasadasdssion & Warfare", year: "1990"},
@@ -225,7 +221,7 @@ limitations under the License.
 
                        private function addItem():void
                        {
-                               tablesModel.guitarrists.addItem({icon: 
MaterialIconType.CLOSE, guitarrist: "Eric Johnson", album: "Venus Isle", year: 
"1996"});
+                               (table.dataProvider as 
ArrayList).addItem({icon: MaterialIconType.CLOSE, guitarrist: "Eric Johnson", 
album: "Venus Isle", year: "1996"});
                        }
 
                        public function removeItemAt():void
diff --git a/examples/royale/JewelExample/src/main/royale/models/TablesModel.as 
b/examples/royale/JewelExample/src/main/royale/models/TablesModel.as
index 0f986e9..c77144f 100644
--- a/examples/royale/JewelExample/src/main/royale/models/TablesModel.as
+++ b/examples/royale/JewelExample/src/main/royale/models/TablesModel.as
@@ -20,6 +20,7 @@ package models
 {
        import org.apache.royale.collections.ArrayList;
 
+       [Bindable]
        public class TablesModel 
        {
                private var _guitarrists:ArrayList = new ArrayList([
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as
index d7c29ad..c48a8a2 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddTableItemRendererForArrayListData.as
@@ -102,12 +102,17 @@ package org.apache.royale.jewel.beads.itemRenderers
                        dataProviderChangeHandler(null);
                }
                
+               private var dp:IEventDispatcher;
                /**
                 * @private
                 */
                protected function dataProviderChangeHandler(event:Event):void
                {
-                       var dp:IEventDispatcher = model.dataProvider as 
IEventDispatcher;
+                       if(dp)
+                       {
+                               
dp.removeEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded);
+                       }
+                       dp = model.dataProvider as IEventDispatcher;
                        if (!dp)
                                return;
                        
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
index 2d0db87..dde0b57 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
@@ -155,8 +155,15 @@ package org.apache.royale.jewel.beads.itemRenderers
                                return;
                        var dp:ICollectionView = model.dataProvider as 
ICollectionView;
                        if (!dp)
+                       {
+                               model.selectedIndex = -1;
+                               model.selectedItem = null;
+                               model.selectedItemProperty = null;
+
+                               // TBodyContentArea - remove data items
+                               tbody.removeAllItemRenderers();
                                return;
-                       
+                       }
                        // remove this and better add beads when needed
                        // listen for individual items being added in the 
future.
                        // var dped:IEventDispatcher = dp as IEventDispatcher;
@@ -164,14 +171,14 @@ package org.apache.royale.jewel.beads.itemRenderers
                        // dped.addEventListener(CollectionEvent.ITEM_REMOVED, 
itemRemovedHandler);
                        // dped.addEventListener(CollectionEvent.ITEM_UPDATED, 
itemUpdatedHandler);
                        
+            // TBodyContentArea - remove data items
+                       tbody.removeAllItemRenderers();
                        
             // THEAD - remove header items
                        removeElements(view.thead);
             // -- add the header
             createHeader();
                        
-            // TBodyContentArea - remove data items
-                       tbody.removeAllItemRenderers();
                        
                        // -- 2) CREATION PHASE
                        var presentationModel:IListPresentationModel = 
_strand.getBeadByType(IListPresentationModel) as IListPresentationModel;

Reply via email to