The edge cases will get you. One issue (so far) with this is that if you Tab
with an invalid value (focus is lost and regained), then follow up with an
Esc, the committed value will be the invalid one. I might be able to live
with this. If I call preventDefault in the OTHER case, I don't have that
issue, but then the editor regains focus but without the current (invalid)
value.

On Nov 29, 2007 12:38 PM, Richard Rodseth <[EMAIL PROTECTED]> wrote:

> Actually, it turns out I have to take the DataGridEventReason into
> account.
>
> private function handleItemEditEnd(event : DataGridEvent) : void {
>
>   if (event.itemRenderer.data.valid || event.reason ==
> DataGridEventReason.OTHER) {
>
>     // do some stuff;
>
>   } else if (event.reason == DataGridEventReason.OTHER) {
>
>     // Losing focus outside the data grid - take it back
>
>     myGrid.editedItemPosition = {columnIndex:event.columnIndex, rowIndex:
> event.rowIndex}
>
>   } else {
>
>     // Losing focus to another row or column - prevent it
>
>     event.preventDefault();
>
>   }
>
> }
>
> On Nov 29, 2007 11:58 AM, Richard Rodseth <[EMAIL PROTECTED]> wrote:
>
> > Thanks, Alex. I don't know if there's a bug, per se.
> > As I mentioned in my first post, I only had an issue when losing focus
> > to something outside the grid. I may have a workable solution which is
> > hopefully not too ugly:
> >
> > - on itemEditEnd, call preventDefault, and re-activate the editor using
> > editedItemPosition
> > - in the editor, override setFocus and call the validator
> >
> > I haven't tested this with scrolling.
> >
> > On Nov 29, 2007 11:15 AM, Alex Harui < [EMAIL PROTECTED] > wrote:
> >
> > >    Keep in mind that, if the user scrolls, or clicks outside the DG,
> > > there is no way to prevent the edit session from ending (at least not
> > > without a whole bunch of work).
> > >
> > > I just took a look at the code.  When tabbing from one cell to
> > > another, preventDefault() on itemEditEnd should keep the editor alive.  If
> > > you put  together a small test case I can try to see why it doesn't work.
> > >
> > >  ------------------------------
> > > *From:* flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED]
> > > *On Behalf Of *Richard Rodseth
> > > *Sent:* Thursday, November 29, 2007 10:52 AM
> > > *To:* flexcoders@yahoogroups.com
> > > *Subject:* Re: [flexcoders] itemEditEnd preventDefault
> > >
> > >  And if I omit preventDefault, the invalid value remains, but the red
> > > focus ring turns blue. I've also established that setting 
> > > editedItemPosition
> > > creates a new item editor (as I would expect), so I can't store and 
> > > access a
> > > "valid" flag in the item editor component.
> > >
> > > Is there some other way to prevent an invalid field from losing focus?
> > > Or to restart the edit with the invalid value and have it re-validate?
> > >
> > > On Nov 28, 2007 1:51 PM, Richard Rodseth <[EMAIL PROTECTED]> wrote:
> > >
> > > > That keeps(restores) the focus, but also restores the pre-edit
> > > > value.
> > > >
> > > >
> > > > On Nov 28, 2007 1:20 PM, Alex Harui < [EMAIL PROTECTED]> wrote:
> > > >
> > > > >    IIRC, the pattern is to call preventDefault and then set
> > > > > editedItemPosition to the current position.
> > > > >
> > > > >  ------------------------------
> > > > > *From:* flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com
> > > > > ] *On Behalf Of *Richard Rodseth
> > > > > *Sent:* Wednesday, November 28, 2007 12:20 PM
> > > > > *To:* flexcoders@yahoogroups.com
> > > > > *Subject:* [flexcoders] itemEditEnd preventDefault
> > > > >
> > > > >    I have an item renderer/editor that does as-you-type validation
> > > > > using standard Flex validators, and updates a "valid" property in the 
> > > > > data.
> > > > > I wish to prevent the edit from ending if the data is valid.
> > > > >
> > > > > When tabbing, the following works in column one, but not in column
> > > > > two (the last editable column):
> > > > >
> > > > >  private function handleItemEditEnd(event : DataGridEvent) : void{
> > > > >
> > > > > if (event.itemRenderer.data.valid) {
> > > > >
> > > > > // do some stuff
> > > > >
> > > > > } else {
> > > > >
> > > > > event.preventDefault();
> > > > >
> > > > > }
> > > > >
> > > > >
> > > > > Any ideas? Also, does the renderer get any access to this event?
> > > > > If I want to move "valid" from the data to the renderer itself, I 
> > > > > suppose I
> > > > > would have to cast event.itemRenderer above to my renderer type,
> > > > > and call a method or access a property.
> > > > >
> > > > >
> > > > > Thanks.
> > > > >
> > > > >
> > > >
> > >   
> > >
> >
> >
>

Reply via email to