I resolved part of the issue. However, as with many things one resolution
reveals aditional issues. Creating a new record works fine. Updating existing
records requires making selections for all DropDownLists (DDLs) even if the
user is only correcting data in a TextInput box. Otherwise, the fields get
populated with NULL values.
What did I miss?
The new code is a follows:
<fx:Script>
<![CDATA[
// Define the variables used within the DDLs
[Bindable]
public var _selectedStatus:String;
[Bindable]
public var _selectedCategory:String;
[Bindable]
public var _selectedStyle:String;
// Functions to facilatate selection changes
private function statusChanged(e:IndexChangeEvent):void
{
if ( _selectedStatus == null ) {
_selectedStatus = originals.status;
}
_selectedStatus = statusDDL.selectedItem.status;
}
protected function categoryChanged(e:IndexChangeEvent):void
{
if ( _selectedCategory == null ) {
_selectedCategory = originals.category;
}
_selectedCategory = categoryDDL.selectedItem.category;
}
protected function stylesChanged(event:IndexChangeEvent):void
{
if ( _selectedStyle == null ) {
_selectedStyle = originals.style;
}
_selectedStyle = styleDDL.selectedItem.style;
}
]]>
</fx:Script>
</s:FormItem>
<s:FormItem label="Edition" styleName="formLabel">
<s:DropDownList id="editionDDL" width="157"
borderColor="#c3c3c3"
change="editionChanged(event)" color="#000000"
creationComplete="editionDDL_creationCompleteHandler(event)"
labelField="edition"
prompt="{originals.edition}"
skinClass="CustomSkins.CustomDropDownListSkin"
styleName="formContent" symbolColor="#FFFFFF"
dataProvider="{editionList}"/>
</s:FormItem>
--- In [email protected], Scott Fanetti <scott.fanetti@...> wrote:
>
> It looks like you are setting the status on the change in the drop down list
> but not casting it. Is that your issue? The change handler does not seem
> attached - what is triggering it? When you debug it - what are the contents
> of the drop down list data provider?
>
> Sent from my iPhone
>
> On Feb 5, 2012, at 8:31 AM, "hermeszfineart" <hermeszfineart@...> wrote:
>
> > I have been trying to migrate certain form fields from <s:TextInput/> to
> > <s:DropDownList/> where the DB columns have foreign keys to different
> > tables (i.e. Status, Categories, Dimensions) so the user does not need to
> > type the values. When I attempt to update the DB record it populates the
> > field with "[object Status]". This implementation is primarily for the back
> > office management of the application but some of this type of
> > functionallity will be used to drive the front end as well in the future.
> >
> > I know I must be missing something very simple so any help is appreciated.
> >
> > Here is the applicable code:
> >
> > <fx:Script>
> >
> > <![CDATA[
> >
> > import mx.binding.utils.BindingUtils;
> >
> > import mx.collections.IList;
> >
> > importmx.collections.errors.ItemPendingError;
> >
> > import mx.controls.Alert;
> >
> > import mx.events.FlexEvent;
> >
> > import mx.rpc.AsyncResponder;
> >
> > import mx.rpc.AsyncToken;
> >
> > import mx.rpc.Fault;
> >
> > import mx.rpc.events.FaultEvent;
> >
> > import mx.rpc.events.ResultEvent;
> >
> > import spark.events.GridItemEditorEvent;
> >
> > import spark.events.GridSelectionEvent;
> >
> > import spark.events.IndexChangeEvent;
> >
> > import valueObjects.Categories;
> >
> > import valueObjects.Dimensions;
> >
> > import valueObjects.Editions;
> >
> > import valueObjects.Mediums;
> >
> > import valueObjects.Status;
> >
> > import valueObjects.Styles;
> >
> > import valueObjects.Subjects;
> >
> > [Bindable] private var _selectedStatus:String = "Available" ;
> >
> > private function statusChanged(event:IndexChangeEvent):void{
> >
> > if (event.newIndex == -1) return;
> >
> > _selectedStatus = statusList.getItemAt(event.newIndex) as String;
> >
> > }
> >
> > protected function button_clickHandler(event:MouseEvent):void{
> >
> > originals.inventoryno = inventorynoTextInput.text;
> >
> > originals.title = titleTextInput.text;
> >
> > originals.price = priceTextInput.text;
> >
> > originals.status = _selectedStatus; // Original version -- originals.status
> > = statusTextInput.text:
> >
> > originals.category = categoryTextInput.text;
> >
> > // Output omitted
> >
> > if (originals.originalid==0){
> >
> > createOriginalResult.token = artServices.createOriginal(originals);
> >
> > }
> >
> > else{
> >
> > updateOriginalResult.token = artServices.updateOriginal(originals);
> >
> > }
> >
> > }
> >
> > ]]>
> >
> > </fx:Script>
> >
> > <fx:Declarations>
> >
> > <s:AsyncListView id="statusList"
> > list="{getAllArtStatusResult.lastResult}"/> <!-- DataProvider -->
> >
> > </fx:Declarations>
> >
> > <!-- output omitted for brevity -->
> >
> > <s:FormItem label="Status" styleName="formLabel">
> >
> > <s:TextInput id="statusTextInput" styleName="formContent"
> > text="{originals.status}"/> <!-- this is one of the fields I am trying to
> > replace -->
> >
> > <s:DropDownList id="dropDownStatusList"
> >
> > labelField="status" styleName="formContent"
> > skinClass="CustomSkins.CustomDropDownListSkin" dataProvider="{statusList}"
> > prompt="{originals.status}"
> >
> > change="{_selectedStatus = dropDownStatusList.selectedItem}"
> > creationComplete="dropDownList_creationCompleteHandler(event)"
> >
> > symbolColor="#FFFFFF" borderColor="#c3c3c3" width="157" color="#000000">
> >
> > </s:DropDownList>
> >
> > </s:FormItem>
> >
> >
>