OK - If I reassign the ArrayCollection (and retell it what the 
selectedIndex is), it updates correctly.  i.e., at the end othe 
setFirstItem(),setSecondItem():

cbTestData.dataProvider = ac;

But seriously, there's got to be a better way than that.  Otherwise, 
what's the point of using an ArrayCollection binding with a combobox?

 - Chris

--- In flexcoders@yahoogroups.com, "qnotemedia" <[EMAIL PROTECTED]> 
wrote:
>
> 
> I've developed a test mxml file of the current "combobox note 
updating"
> problem at hand.
> 
> In the following example, click Fill Data.  The combobox's data 
fills
> up.  Choose either the first or second item in the combobox.  Now 
click
> the associated "Rename Data" button for the item chosen.
> 
> Notice that nothing happens?  But wait, if you click the combobox to
> open it, you'll see that the data was in fact updated, but we're 
just
> not seeing it.
> 
> Now change the ComboBox to a DataGrid.  Everything works fine.
> 
> What gives?
>   - Chris
> 
> PS - you're probably wondering why I used ObjectProxy.  This was 
because
> I noticed in my debugger that everything else was as well for the
> particular place where I was testing this.  Regardless, it doesn't 
seem
> to matter what I used (Array, Object, etc.), as the problem still
> occurs.
> 
> -------------testProblem.mxml-------------
> 
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
> <http://www.adobe.com/2006/mxml> " layout="vertical">
> 
>   <mx:Script>
>    <![CDATA[
>     import mx.utils.ObjectProxy;
>     import mx.collections.ArrayCollection;
> 
>     [Bindable]
>     private var ac:ArrayCollection = new ArrayCollection;
> 
>     private function init():void {
>      var buildData1:ObjectProxy = new ObjectProxy;
>      buildData1.field1 = "object1-field1";
>      buildData1.field2 = "object1-field2";
>      buildData1.field3 = "object1-field3";
>      var buildData2:ObjectProxy = new ObjectProxy;
>      buildData2.field1 = "object2-field1";
>      buildData2.field2 = "object2-field2";
>      buildData2.field3 = "object2-field3";
>      ac.addItem(buildData1);
>      ac.addItem(buildData2);
>     }
>     private function setFirstItem():void {
>      var buildData1_renamed:ObjectProxy = new ObjectProxy;
>      buildData1_renamed.field1 = "object1_renamed-field1";
>      buildData1_renamed.field2 = "object1_renamed-field2";
>      buildData1_renamed.field3 = "object1_renamed-field3";
>      ac.setItemAt(buildData1_renamed,cbTestData.selectedIndex);
>     }
>     private function setSecondItem():void {
>      var buildData2_renamed:ObjectProxy = new ObjectProxy;
>      buildData2_renamed.field1 = "object2_renamed-field1";
>      buildData2_renamed.field2 = "object2_renamed-field2";
>      buildData2_renamed.field3 = "object2_renamed-field3";
>      ac.setItemAt(buildData2_renamed,cbTestData.selectedIndex);
>     }
>    ]]>
>   </mx:Script>
> 
>   <mx:ComboBox id="cbTestData" dataProvider="{ac}" 
labelField="field1"
> width="50%"/>
>   <mx:Button label="Fill with Data" click="init()"/>
>   <mx:Button label="Rename Data in Item #1 (select the first item 
before
> clicking)" click="setFirstItem()"/>
>   <mx:Button label="Rename Data in Item #2 (select the second item 
before
> clicking)" click="setSecondItem()"/>
>   <mx:Text text="{cbTestData.selectedItem.field1}"/>
>   <mx:Text text="{cbTestData.selectedItem.field2}"/>
>   <mx:Text text="{cbTestData.selectedItem.field3}"/>
> </mx:Application>
> 
> 
> 
> --- In flexcoders@yahoogroups.com, "qnotemedia" <qnotemedia@> wrote:
> >
> > Concerning this last post - I even changed the combobox to a
> > datagrid, nothing else changed, and it works perfectly fine.
> >
> > What gives? What's so different about the two?
> >
> > - Chris
> >
> > --- In flexcoders@yahoogroups.com, "qnotemedia" qnotemedia@
> > wrote:
> > >
> > > I hear ya Tracy. Been browsing it from my MAX docs, and maybe
> > we'll
> > > do it in the next project. ;)
> > >
> > > Still harping on this particular thing, I've run into a weird
> > > unrelated snag. When the object in the main app is a combobox
> > > instead of a datagrid, the combobox's display doesn't update 
(even
> > > tho the data is).
> > >
> > > i.e. running the titlewindow as an "editor," I edit some values 
in
> > > text boxes from, and when I click "OK" from the titlewindow, the
> > AC's
> > > are updated with setItemAt and the window closes and the object 
on
> > > the main app updates (because its bound to a public AC 
variable).
> > >
> > > If the object is a datagrid, everything updates fine. If its a
> > > combobox, it updates the data correctly, but initially it 
doesn't
> > > look like it - the displayed label hasn't changed. Clicking the
> > > combobox to open it, you can see that the selected label and 
data
> > are
> > > in fact updated. Closing the combobox without choosing anything
> > > updates he label correctly. How come its not immediately updated
> > > when the AC is, like the datagrid?
> > >
> > > Tried refresh() on the AC just before closing the window, but 
that
> > > didn't seem to do anything. Not sure what else to try!
> > >
> > > Thanks all,
> > > - Chris
> > >
> > >
> > > --- In flexcoders@yahoogroups.com, "Tracy Spratt" <tspratt@> 
wrote:
> > > >
> > > > I am slowly becoming comfortable with using event driven
> > > functionality,
> > > > so this opinion is only that.
> > > >
> > > >
> > > >
> > > > However, the primary benefit of "loose coupling" is re-
usability,
> > > and
> > > > maybe "maintainability", in the sense that it will be easier 
to
> > > drop-in
> > > > replacement parts. (any others, anyone?). But event code is a
> > > little
> > > > harder to write read and debug than straight calls to directly
> > > > referenced members. If you are reasonably sure what you are
> > > building
> > > > will not need to be re-used, then there may be little benefit 
in
> > the
> > > > effort to gain loose coupling.
> > > >
> > > >
> > > >
> > > > So "wrong"? No. "Best practice"? It depends. Think ahead.
> > > >
> > > >
> > > >
> > > > Tracy
> > > >
> > > >
> > > >
> > > > ________________________________
> > > >
> > > > From: flexcoders@yahoogroups.com
> > > [mailto:[EMAIL PROTECTED] On
> > > > Behalf Of qnotemedia
> > > > Sent: Tuesday, December 05, 2006 12:19 PM
> > > > To: flexcoders@yahoogroups.com
> > > > Subject: [flexcoders] Re: TitleWindow Component...help!
> > > >
> > > >
> > > >
> > > > Well - what I've done, after finding a titlewindow example on
> > > cflex,
> > > > is create a public variable in the titlewindow component of 
the
> > > same
> > > > name as one in the application, and I send it to the component
> > from
> > > > the main app AND back via the title window's instance 
variable.
> > > i.e.:
> > > >
> > > > TitleWindow Component:
> > > >
> > > > [Bindable]
> > > > public var aListOfData:ArrayCollection;
> > > >
> > > > private function sendData():void {
> > > > -> runs when you click submit in titlewindow
> > > > var compilation:Obect = new Object;
> > > > compilation.setting1 = "something in component";
> > > > aListOfData.addItem(compilation); (or setItemAt, etc)
> > > > }
> > > >
> > > > Main Application looks like this:
> > > >
> > > > [Bindable]
> > > > private var aListofData:ArrayCollection;
> > > >
> > > > private function openComponent():void {
> > > > -> runs when you click open window in the main app
> > > > var openingWindow....blah blah, opening the TitleWindow;
> > > > openingWindow.aListOfData = aListOfData;
> > > > }
> > > >
> > > > OK - so those variable names are random thoughts off the top 
of
> > my
> > > > head, bu you get the picture. From what I understand, this
> > doesn't
> > > > follow the idea behind "loosely coupled components," but is 
there
> > > > anything really "wrong" with this methodology? It seems to 
work
> > > very
> > > > well in my case. I can even have a window within a window, all
> > > > passing variables between windows, all the way down to the 
main
> > app
> > > > quite easily, and so far its been a breeze to setup.
> > > >
> > > > Thoughts anyone? If I continue down this path, where will I 
start
> > > to
> > > > run into problems?
> > > > - Chris
> > > >
> > > > --- In flexcoders@yahoogroups.com <mailto:flexcoders%
> > > 40yahoogroups.com>
> > > > , "Roman Protsiuk"
> > > > <roman.protsiuk@> wrote:
> > > > >
> > > > > Hi.
> > > > >
> > > > > Why don't your pop up dispatch some event 
(e.g. "submitData")
> > and
> > > > you listen
> > > > > to it?
> > > > >
> > > > > R.
> > > > >
> > > > > On 12/5/06, qnotemedia <qnotemedia@> wrote:
> > > > > >
> > > > > > OK - so I'm using the generic TileWindow example found on 
the
> > > > > > Component Explorer. It basically shows you how to build
> > > something
> > > > > > where:
> > > > > > 1) User clicks a button, Window pops up.
> > > > > > 2) User types into a text box in the window, clicks 
Submit.
> > > > > > 3) Text typed in appears in the main app.
> > > > > >
> > > > > >
> > > >
> > 
http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html
> > > >
> > >
> > 
<http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html>
> > >
> > > > > >
> > > > > > But, I'm having a little difficulty understanding the
> > > assignment
> > > > of
> > > > > > the returned data. i.e.:
> > > > > >
> > > > > > login.loginName=returnedName;
> > > > > >
> > > > > > ...where login is the instance of the TitleWindow, 
loginName
> > is
> > > a
> > > > > > public Text variable inside the component, and 
returnedName
> > is
> > > a
> > > > text
> > > > > > box in the main app.
> > > > > >
> > > > > > My confusion comes up when I try to edit this so that:
> > > > > > 1) App has a combobox. Dataprovider for the combobox is an
> > > > > > ArrayCollection of data: "data" and "label." User clicks a
> > > button,
> > > > > > TitleWindow pops up.
> > > > > > 2) User types into a text box in the window, clicks 
Submit.
> > > > > > 3) The text is a passed as a label, along with a 
generated ID
> > > > > > (generated in the component) and is added to the 
combobox's
> > > > > > dataprovider.
> > > > > >
> > > > > > The problem appears to be that there is no handler of the
> > Submit
> > > > > > button click on the main application. Obviously, I would 
add
> > to
> > > a
> > > > > > datasource and return an ID from that, but I can't even 
get
> > > this
> > > > to
> > > > > > work manually (i.e. for testing purposes, setting a static
> > data
> > > > and
> > > > > > label).
> > > > > >
> > > > > > Just trying to keep this as simple as possible. Seems to 
me
> > > that
> > > > if
> > > > > > I can pass a string of text, I should also be able to 
pass an
> > > > Object
> > > > > > that is added to a dataProvider in the main app? Right?
> > > > > >
> > > > > > Help!
> > > > > > - Chris
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>


Reply via email to