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;