Hi,
I am trying to create Spark custom component which represents a table row
which includes TextInputs, DropDownList and CheckBox,
that is to Add/Edit/Delete data (rows) to DB.
I am pretty new to component development,
looking at somebody else's code who did something similar (kind of repeater
where you can add/delete a row),
trying to at least bring their similar component on my form,
and so far failing to show it, even one row.
Granted, I don't have all data they have, so trying to fake it. Their have
structures within structures, within structures (for example, to show list
of values in DropDownList's).
And theire itemRenderer has 6 levels before it gets to standard Spark
component (I guess, trying to make code reusable, so break it in layers).
I would like to at least make it show up on my form and work simplest
possible way for now.
Have a lot of questions.
Some exerpts from their code:
<s:FormItem label="Columns"
visible="{hostComponent.dbColEntryVisible}"
includeInLayout="{hostComponent.dbColEntryVisible}"
width="100%">
<s:DataGroup id="dbColDG"
dataProvider="{new ArrayList(hostComponent.fieldColumnMapDS)}"
itemRenderer="ColumnMapRenderer"
rendererAdd="dbColDG_rendererAddHandler(event)"
rendererRemove="dbColDG_rendererRemoveHandler(event)">
<s:layout>
<s:VerticalLayout/>
</s:layout>
</s:DataGroup>
</s:FormItem>
[Bindable]
public var fieldColumnMaps:Array = new Array; // how is it passed to the
item renderer?
and why "new Array", not "new Array()". Is it legitimate?
[Bindable]
public var fieldColumnMapDS:Array = new Array; // includes fieldColumnMaps
among many other structures (e.g. dbFields array). passes to DataGroup
dataProvider.
// from that ColumnMapRenderer:
<s:HGroup verticalAlign="middle">
<s:Label text="{dbFields.dsn.dsnId}"/>
<s:DataGroup id="dbField_DataGroup"
dataProvider="{new ArrayList(dbFields.dbFieldFCMs)}"
itemRenderer="ieddata.metaweb.view.renderer.DBFieldFieldColumnMapRenderer"
rendererAdd="dbFieldFCM_DataGroup_rendererAddHandler(event)"
rendererRemove="dbFieldFCM_DataGroup_rendererRemoveHandler(event)">
<s:layout>
<s:VerticalLayout/>
</s:layout>
</s:DataGroup>
</s:HGroup>
override public function set data(value:Object):void {
// Not called explicitly by anything. HOW does it work?
if (value is dbFields) {
dbFields = value as dbFields;
} else {
dbFields = null;
}
super.data = value;
}
Can anyone answer my questions throughout that code?
Any code samples?
So far I managed only to show that "Add Row" button on my form, and ONLY
if I do:
[Bindable]
public var fieldColumnMapDS:Array = [ {name:"anObject"} ]; // have to
initialize that array.
So does DataGroup require to have non-empty dataProvider to show anything?
Please advise!
TIA,
Oleg.
P.S.: this is alternative for me to doing similar development in FX
DataGrid (see another thread here about a week ago)