Will do from now on.  Thanks again Alex.

John
--- In flexcoders@yahoogroups.com, "Alex Harui" <[EMAIL PROTECTED]> wrote:
>
> My rule is: don't use Bindable unless you absolutely need it.  It adds
> overhead to your application.  You'll get warning if you try to bind to
> something that isn't bindable and then you can decide how to deal with
> it.
> 
>  
> 
> I use [Bindable] in prototypes, but I would use it more sparingly in
> real apps.  In the framework, we always use [Bindable(event=...)] so we
> have full control over all the code.  If you did that, then you have to
> write more code, but you can fully see what is running and opt-in to
> having change detection or not.
> 
>  
> 
> ________________________________
> 
> From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
> Behalf Of j_lentzz
> Sent: Wednesday, January 02, 2008 11:02 AM
> To: flexcoders@yahoogroups.com
> Subject: [flexcoders] Re: Datagrid Renderer not showing updated
> ArrayCollection
> 
>  
> 
> Thank You! That fixed it. Are there 'rules' to follow about when/if
> things need to be bindable? I've been using the [Bindable] tag pretty
> often. Should I not use it until it seems like something is not working?
> 
> Thanks again,
> 
> John
> --- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
> , "Alex Harui" <aharui@> wrote:
> >
> > Try removing [Bindable] from the data setter. I don't see where you
> are
> > using it, and it autogenerates change detection logic that may prevent
> > your setter from running since the comparision is done by reference
> > 
> > 
> > 
> > ________________________________
> > 
> > From: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
> [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
> ] On
> > Behalf Of j_lentzz
> > Sent: Wednesday, January 02, 2008 10:44 AM
> > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> 
> > Subject: [flexcoders] Re: Datagrid Renderer not showing updated
> > ArrayCollection
> > 
> > 
> > 
> > Here is the code for the renderer. I extend Label and add a
> > dataProvider to make it act like a combobox, so that I can specify an
> > index to show. That way it doesn't look like a combobox when it
> > renders. I'm not doing anything special to look for a change, just
> > implementing what I thought was necessary.
> > 
> > public class LabelWithDownArrow extends Label
> > {
> > 
> > private var _dataProvider:ArrayCollection = null;
> > 
> > private var _prompt:String = null;
> > private var defaultPrompt:String = "Select Item...";
> > private var _selectedIndex:int = -1;
> > 
> > public function LabelWithDownArrow()
> > {
> > super();
> > }
> > 
> > public function set dataProvider(value:ArrayCollection):void {
> > _dataProvider = value;
> > }
> > 
> > public function get dataProvider():ArrayCollection {
> > return _dataProvider;
> > }
> > 
> > public function set selectedIndex(value:int):void {
> > _selectedIndex = value;
> > }
> > 
> > public function get selectedIndex():int {
> > return _selectedIndex;
> > }
> > 
> > public function set prompt(value:String):void {
> > _prompt = value;
> > }
> > 
> > public function get prompt():String {
> > return _prompt;
> > }
> > 
> > override protected function updateDisplayList(w:Number, h:Number):void
> {
> > super.updateDisplayList(w-15, h); // subtract from width to allow
> > for down arrow
> > 
> > var g:Graphics = graphics;
> > 
> > g.clear();
> > 
> > // add arrow to box
> > // Draw the triangle.
> > g.beginFill(0x000000); // black
> > g.moveTo(w - 11.5, h / 2 + 3);
> > g.lineTo(w - 15, h / 2 - 2);
> > g.lineTo(w - 8, h / 2 - 2);
> > g.lineTo(w - 11.5, h / 2 + 3);
> > g.endFill();
> > }
> > 
> > // method used to change what is displayed
> > [Bindable]
> > override public function set data(value:Object):void {
> > super.data = value;
> > 
> > if (listData != null && dataProvider != null) { 
> > 
> > // now iterate through dp to find a matching data value, when
> > found put its label in the Label widget 
> > var dpLen:int = dataProvider.length;
> > for (var j:int=0; j<dpLen; j++) {
> > if (dataProvider.getItemAt(j).data ==
> > data[DataGridListData(listData).dataField]) { // found match
> > this.text = dataProvider.getItemAt(j).label; // + " " +
> > dp.getItemAt(j).data;
> > trace('found LabelWithDownArrow');
> > return;
> > }
> > }
> > 
> > // not found, so show comboBox prompt
> > if (prompt == null || prompt == "-1" || selectedIndex == -1)
> > this.text = defaultPrompt;
> > else if (selectedIndex < dataProvider.length)
> > this.text = dataProvider.getItemAt(selectedIndex).label;
> > else
> > this.text = "";
> > 
> > trace('not found LabelWithDownArrow');
> > }
> > }
> > 
> > }
> > 
> > --- In flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > , "Alex Harui" <aharui@> wrote:
> > >
> > > What does the renderer look like? How will it detect changes to the
> > > underlying data?
> > > 
> > > 
> > > 
> > > ________________________________
> > > 
> > > From: flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > [mailto:flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > ] On
> > > Behalf Of j_lentzz
> > > Sent: Wednesday, January 02, 2008 7:21 AM
> > > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com> 
> > > Subject: [flexcoders] Datagrid Renderer not showing updated
> > > ArrayCollection
> > > 
> > > 
> > > 
> > > Hi,
> > > 
> > > I've got a datagrid with a custom renderer. I'm not editing in the
> > > datagrid, but when a row is selected, I populate some TextInputs and
> > > ComboBoxes to let them edit the data. When they are done, I use
> > > itemUpdated on the datagrid ArrayCollection. This seems to work just
> > > fine. However, after they edit the data, it isn't being updated in
> > > the datagrid. I can select a different row, then select the original
> > > row and the new data appears in the edit locations, but only the old
> > > data is displayed in the datagrid. I've tried all the invalidateXXX
> > > methods I could find, but nothing seems to get the datagrid do
> display
> > > the new data. Also, I can set a breakpoint, examine the
> > > arraycollection the datagrid uses, and the correct data is present -
> > > just not being displayed. What do I need to do to get the datagrid
> to
> > > be forced to used the arraycollection and update all the
> > > itemrenderers? I'm using 2.01, would Flex 3 be better?
> > > 
> > > Thanks,
> > > 
> > > John
> > >
> >
>


Reply via email to