Kevin,
When I first encountered data binding I thought the same thing you did, that
it was a two-way binding. Of course, in reality you usually don't won't a
direct two-way binding because either you need to validate the data before
it is stored, or there is a side-effect to the data change before it is
stored, or it needs to be transmitted to the server first.
Binding really is a great MVC tool because it encourages you to truly
separate your app into Model, View and Controller. With binding, the view
only gets read-only access to the model and also automatically receives
notifications of updates.
Of course, in some cases where your view is only editing plain data stored
locally, you do sometimes want two-way binding. Fortunately, Flex's binding
mechanisms detects loops and prevents them, so you don't have to worry about
cycles in your binding!
Troy.
On 12 Mar 2007 15:57:45 -0700, Sean Sell <[EMAIL PROTECTED]> wrote:
Hank is correct, but if you are working on a prototype or something and
are editing data in place
you might want to try a call to currentUsersList.refresh() and see if your
changes show up.
I have the following:
private function sampleMessageHandler( e : MessageEvent) :
void
{
conversation += e.message.headers.sender + " / " +
e.message.headers.type + " / " +
e.message.headers.oper +
": " + e.message.body + "\n";
if (e.message.headers.type == "data") {
if (e.message.headers.oper == "add") {
var obj : Object = new Object();
obj.col1 = e.message.body;
myData.addItem(obj);
} else if (e.message.headers.oper == "lock") {
var myCursor : IViewCursor = myData.createCursor
();
while (!myCursor.afterLast) {
if (myCursor.current.col1 == e.message.body) {
myCursor.current.col2 =
e.message.headers.sender;
myData.refresh();
break;
}
myCursor.moveNext();
}
}
}
}
The changes don't show up in the grid until the myData.refresh();
--Sean
----- Original Message ----
From: hank williams <[EMAIL PROTECTED]>
To: [email protected]
Sent: Monday, March 12, 2007 6:16:37 PM
Subject: Re: [flexcoders] Data Binding to Item in ArrayCollection
Kevin,
In a cairngorm app, you want to detect the change to the row and then send
it to the server. If the server accepts the change then in the response to
the command object you change the item in the arrayCollection which is then
reflected in your data grid, which is bound to the arrayCollection. If you
dont do it this way then your data model is not in sync with the server,
which you want to avoid. By the way you want to use the functions of the
arrayCollection to change the data because otherwise events that cause the
datagrid to update will not be triggered.
Hank
On 3/12/07, Kevin <[EMAIL PROTECTED] com <[EMAIL PROTECTED]>>
wrote:
>
> I am working on a Cairngorm app. I have a simple User Admin
> Interface. The ModelLocator stores a list of all the Users as
> currentUsersList: ArrayCollection
>
> I populate a small DataGrid with this list and everything is working
> fine. To edit the list, the user can click on a row in the DataGrid and
> then edit the information. The problem is that for some reason the changed
> information isn't getting changed in the DataGrid like it should. What is
> the proper way to bind a control to an individual item in an
> ArrayCollection?
>
> I first tried to create a variable in the ML to hold the UserDataVO that
> had been selected:
>
> selectedUser: UserDataVO = currentUsersList[ some selected index];
>
> However, this seems to 'copy' (rather than reference) the VO from the
> Array collection and thus changes to this VO do not get reflected in the
> original ArrayCollection
>
> I then tried to bind directly to the ArrayCollection items using
> getItemAt
>
> text = {model.currentUsers List.getItemAt(selectedIndex) .username}
>
> However, this doesn't seem to work to modify the original values in the
> ArrayCollection. What am I doing wrong. I don't think it should be this
> hard.
>
> Thanks, Kevin
>
------------------------------
The fish are biting.
Get more
visitors<http://us.rd.yahoo.com/evt=49679/*http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php?o=US2140&cmp=Yahoo&ctv=Q107Tagline&s=Y&s2=EM&b=50>on
your site using Yahoo!
Search Marketing.