Hi Peter,
I was going through the DataTable class code and I see that you are adding
mapper bead in addedToParent.
override public function addedToParent():void
{
super.addedToParent();
addBead(new DataTableMapperForArrayListData());
dispatchEvent( new Event("initComplete") );
}
If I add event listener to DataTable class I will get "initComplete"
two times.
You will not have issue with added bead, but developer who will get
this class and use it could have.
Piotr
2017-05-02 22:34 GMT+02:00 <[email protected]>:
> Repository: flex-asjs
> Updated Branches:
> refs/heads/develop 82ff1840e -> 336fac64c
>
>
> Added example of building a Table from a data source to the TableExample
> example.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/336fac64
> Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/336fac64
> Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/336fac64
>
> Branch: refs/heads/develop
> Commit: 336fac64c0eed8b063213a72899f658e9d490cea
> Parents: 82ff184
> Author: Peter Ent <[email protected]>
> Authored: Tue May 2 16:33:57 2017 -0400
> Committer: Peter Ent <[email protected]>
> Committed: Tue May 2 16:33:57 2017 -0400
>
> ----------------------------------------------------------------------
> .../src/main/flex/MyInitialView.mxml | 31 ++++-
> .../src/main/flex/TableExample.mxml | 3 +
> .../src/main/flex/dataTable/DataColumn.as | 33 ++++++
> .../src/main/flex/dataTable/DataTable.as | 69 ++++++++++++
> .../mapper/DataTableMapperForArrayListData.as | 112 +++++++++++++++++++
> .../main/flex/dataTable/model/DataTableModel.as | 40 +++++++
> .../src/main/flex/models/ProductsModel.as | 47 ++++++++
> 7 files changed, 334 insertions(+), 1 deletion(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/MyInitialView.mxml
> ----------------------------------------------------------------------
> diff --git a/examples/flexjs/TableExample/src/main/flex/MyInitialView.mxml
> b/examples/flexjs/TableExample/src/main/flex/MyInitialView.mxml
> index c2f81dd..11d2e29 100644
> --- a/examples/flexjs/TableExample/src/main/flex/MyInitialView.mxml
> +++ b/examples/flexjs/TableExample/src/main/flex/MyInitialView.mxml
> @@ -18,7 +18,9 @@ limitations under the License.
>
> -->
> <js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
> - xmlns:js="library://ns.apache.
> org/flexjs/basic">
> + xmlns:js="library://ns.apache.
> org/flexjs/basic"
> + xmlns:dataTable="dataTable.*"
> + xmlns:model="dataTable.model.*">
>
> <fx:Style>
> @namespace js "library://ns.apache.org/flexjs/basic";
> @@ -44,6 +46,10 @@ limitations under the License.
> padding: 6px;
> }
>
> + .DataTable {
> + iBeadModel: ClassReference("dataTable.
> model.DataTableModel");
> + }
> +
> </fx:Style>
>
> <js:beads>
> @@ -117,5 +123,28 @@ limitations under the License.
> </js:TableCell>
> </js:TableRow>
> </js:Table>
> +
> + <!-- Generates a Table structure from a data source -->
> +
> + <dataTable:DataTable x="600" y="0" width="400" height="400">
> + <dataTable:beads>
> + <js:ConstantBinding
> + sourceID="applicationModel"
> + sourcePropertyName="products"
> + destinationPropertyName="dataProvider" />
> + </dataTable:beads>
> + <dataTable:DataColumn
> + dataField="name"
> + label="State"
> +
> itemRenderer="org.apache.flex.html.supportClasses.StringItemRenderer"
> />
> + <dataTable:DataColumn
> + dataField="capital"
> + label="Capital"
> +
> itemRenderer="org.apache.flex.html.supportClasses.StringItemRenderer"
> />
> + <dataTable:DataColumn
> + dataField="country"
> + label="Country"
> +
> itemRenderer="org.apache.flex.html.supportClasses.StringItemRenderer"
> />
> + </dataTable:DataTable>
>
> </js:View>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/TableExample.mxml
> ----------------------------------------------------------------------
> diff --git a/examples/flexjs/TableExample/src/main/flex/TableExample.mxml
> b/examples/flexjs/TableExample/src/main/flex/TableExample.mxml
> index 2d5c972..41989f8 100644
> --- a/examples/flexjs/TableExample/src/main/flex/TableExample.mxml
> +++ b/examples/flexjs/TableExample/src/main/flex/TableExample.mxml
> @@ -27,6 +27,9 @@
> <js:valuesImpl>
> <js:SimpleCSSValuesImpl />
> </js:valuesImpl>
> + <js:model>
> + <models:ProductsModel />
> + </js:model>
> <js:initialView>
> <local:MyInitialView />
> </js:initialView>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/
> dataTable/DataColumn.as
> ----------------------------------------------------------------------
> diff --git
> a/examples/flexjs/TableExample/src/main/flex/dataTable/DataColumn.as
> b/examples/flexjs/TableExample/src/main/flex/dataTable/DataColumn.as
> new file mode 100644
> index 0000000..b8e5f2e
> --- /dev/null
> +++ b/examples/flexjs/TableExample/src/main/flex/dataTable/DataColumn.as
> @@ -0,0 +1,33 @@
> +///////////////////////////////////////////////////////////
> /////////////////////
> +//
> +// 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 dataTable
> +{
> + import org.apache.flex.html.supportClasses.DataGridColumn;
> +
> + /**
> + * DataColumn is exactly like DataGridColumn
> + */
> + public class DataColumn extends DataGridColumn
> + {
> + public function DataColumn()
> + {
> + super();
> + }
> + }
> +}
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/dataTable/DataTable.as
> ----------------------------------------------------------------------
> diff --git a/examples/flexjs/TableExample/src/main/flex/dataTable/DataTable.as
> b/examples/flexjs/TableExample/src/main/flex/dataTable/DataTable.as
> new file mode 100644
> index 0000000..1b388b6
> --- /dev/null
> +++ b/examples/flexjs/TableExample/src/main/flex/dataTable/DataTable.as
> @@ -0,0 +1,69 @@
> +///////////////////////////////////////////////////////////
> /////////////////////
> +//
> +// 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 dataTable
> +{
> + import dataTable.mapper.DataTableMapperForArrayListData;
> + import dataTable.model.DataTableModel;
> +
> + import org.apache.flex.events.Event;
> + import org.apache.flex.html.Table;
> +
> + [DefaultProperty("columns")]
> +
> + /**
> + * The DataTable uses Table along with a data mapper and item
> renderers to generate
> + * a Table from a data source.
> + */
> + public class DataTable extends Table
> + {
> + public function DataTable()
> + {
> + super();
> +
> + className = "DataTable";
> + }
> +
> + public function get columns():Array
> + {
> + return DataTableModel(model).columns;
> + }
> + public function set columns(value:Array):void
> + {
> + DataTableModel(model).columns = value;
> + }
> +
> + public function get dataProvider():Object
> + {
> + return DataTableModel(model).dataProvider;
> + }
> + public function set dataProvider(value:Object):void
> + {
> + DataTableModel(model).dataProvider = value;
> + }
> +
> + override public function addedToParent():void
> + {
> + super.addedToParent();
> +
> + addBead(new DataTableMapperForArrayListData());
> +
> + dispatchEvent( new Event("initComplete") );
> + }
> + }
> +}
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/dataTable/mapper/
> DataTableMapperForArrayListData.as
> ----------------------------------------------------------------------
> diff --git a/examples/flexjs/TableExample/src/main/flex/dataTable/mapper/
> DataTableMapperForArrayListData.as b/examples/flexjs/
> TableExample/src/main/flex/dataTable/mapper/DataTableMapperForArrayListDat
> a.as
> new file mode 100644
> index 0000000..c80234c
> --- /dev/null
> +++ b/examples/flexjs/TableExample/src/main/flex/dataTable/mapper/
> DataTableMapperForArrayListData.as
> @@ -0,0 +1,112 @@
> +///////////////////////////////////////////////////////////
> /////////////////////
> +//
> +// 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 dataTable.mapper
> +{
> + import dataTable.DataColumn;
> + import dataTable.model.DataTableModel;
> +
> + import org.apache.flex.collections.ArrayList;
> + import org.apache.flex.core.IBead;
> + import org.apache.flex.core.IBeadModel;
> + import org.apache.flex.core.IStrand;
> + import org.apache.flex.events.Event;
> + import org.apache.flex.events.IEventDispatcher;
> + import org.apache.flex.html.Label;
> + import org.apache.flex.html.Table;
> + import org.apache.flex.html.TableCell;
> + import org.apache.flex.html.TableHeader;
> + import org.apache.flex.html.TableRow;
> + import org.apache.flex.html.supportClasses.DataItemRenderer;
> +
> + public class DataTableMapperForArrayListData implements IBead
> + {
> + public function DataTableMapperForArrayListData()
> + {
> + }
> +
> + private var _strand:IStrand;
> +
> + public function set strand(value:IStrand):void
> + {
> + _strand = value;
> +
> +
> IEventDispatcher(_strand).addEventListener("initComplete",
> handleInitComplete);
> + }
> +
> + private function handleInitComplete(event:Event):void
> + {
> + var model:DataTableModel =
> _strand.getBeadByType(IBeadModel)
> as DataTableModel;
> + if (model == null) return;
> +
> + var dp:ArrayList = model.dataProvider as ArrayList;
> + if (dp == null || dp.length == 0) return;
> +
> + var table:Table = _strand as Table;
> +
> + var createHeaderRow:Boolean = false;
> + for(var c:int=0; c < model.columns.length; c++)
> + {
> + var test:DataColumn = model.columns[c] as
> DataColumn;
> + if (test.label != null) {
> + createHeaderRow = true;
> + break;
> + }
> + }
> +
> + if (createHeaderRow) {
> + var headerRow:TableRow = new TableRow();
> +
> + for(c=0; c < model.columns.length; c++)
> + {
> + test = model.columns[c] as
> DataColumn;
> + var tableHeader:TableHeader = new
> TableHeader();
> + var label:Label = new Label();
> + tableHeader.addElement(label);
> + label.text = test.label == null ?
> "" : test.label;
> + headerRow.addElement(tableHeader);
> + }
> +
> + table.addElement(headerRow);
> + }
> +
> + for(var i:int=0; i < dp.length; i++)
> + {
> + var tableRow:TableRow = new TableRow();
> +
> + for(var j:int=0; j < model.columns.length;
> j++)
> + {
> + var column:DataColumn =
> model.columns[j] as DataColumn;
> + var tableCell:TableCell = new
> TableCell();
> +
> + var ir:DataItemRenderer =
> column.itemRenderer.newInstance() as DataItemRenderer;
> + tableCell.addElement(ir);
> + tableRow.addElement(tableCell);
> +
> + ir.labelField = column.dataField;
> + ir.index = i;
> + ir.data = dp.getItemAt(i);
> + }
> +
> + table.addElement(tableRow);
> + }
> +
> + table.dispatchEvent(new Event("layoutNeeded"));
> + }
> + }
> +}
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/dataTable/model/
> DataTableModel.as
> ----------------------------------------------------------------------
> diff --git
> a/examples/flexjs/TableExample/src/main/flex/dataTable/model/DataTableModel.as
> b/examples/flexjs/TableExample/src/main/flex/dataTable/model/
> DataTableModel.as
> new file mode 100644
> index 0000000..084b512
> --- /dev/null
> +++ b/examples/flexjs/TableExample/src/main/flex/dataTable/model/
> DataTableModel.as
> @@ -0,0 +1,40 @@
> +///////////////////////////////////////////////////////////
> /////////////////////
> +//
> +// 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 dataTable.model
> +{
> + import org.apache.flex.html.beads.models.ArrayListSelectionModel;
> +
> + public class DataTableModel extends ArrayListSelectionModel
> + {
> + public function DataTableModel()
> + {
> + super();
> + }
> +
> + private var _columns:Array;
> + public function get columns():Array
> + {
> + return _columns;
> + }
> + public function set columns(value:Array):void
> + {
> + _columns = value;
> + }
> + }
> +}
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 336fac64/examples/flexjs/TableExample/src/main/flex/
> models/ProductsModel.as
> ----------------------------------------------------------------------
> diff --git
> a/examples/flexjs/TableExample/src/main/flex/models/ProductsModel.as
> b/examples/flexjs/TableExample/src/main/flex/models/ProductsModel.as
> new file mode 100644
> index 0000000..06a9b9b
> --- /dev/null
> +++ b/examples/flexjs/TableExample/src/main/flex/models/ProductsModel.as
> @@ -0,0 +1,47 @@
> +///////////////////////////////////////////////////////////
> /////////////////////
> +//
> +// 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 models
> +{
> + import org.apache.flex.collections.ArrayList;
> +
> + public class ProductsModel
> + {
> + public function ProductsModel()
> + {
> + }
> +
> + private var _products:ArrayList = new ArrayList([
> + {name: "British Columbia", capital: "Vancouver",
> country: "Canada"},
> + {name: "Coahuila", capital: "Saltilli", country:
> "Mexico"},
> + {name: "Georgia", capital: "Atlanta", country:
> "USA"},
> + {name: "Kyoto", capital: "Kyoto", country:
> "Japan"},
> + {name: "Massachusetts", capital: "Boston",
> country: "USA"},
> + {name: "New South Wales", capital: "Sydney",
> country: "Australia"},
> + {name: "Quebec", capital: "Montreal", country:
> "Canada"},
> + {name: "Shimane", capital: "Matsue", country:
> "Japan"},
> + {name: "Victoria", capital: "Melbourne", country:
> "Australia"},
> + {name: "Yucatan", capital: "Merida", country:
> "Mexico"}
> + ]);
> +
> + public function get products():ArrayList
> + {
> + return _products;
> + }
> + }
> +}
> \ No newline at end of file
>
>