开发者

How to cancel editing in Halo/Spark TextInput and TextArea components

开发者 https://www.devze.com 2023-03-09 20:31 出处:网络
I am using Flex 4, ActionScript 3. In the AdvancedDataGrid component, when you are in Edit mode in a cell, you can hit the Escape key to cancel editing (i.e. return to the previous value in the cell)

I am using Flex 4, ActionScript 3.

In the AdvancedDataGrid component, when you are in Edit mode in a cell, you can hit the Escape key to cancel editing (i.e. return to the previous value in the cell).

I had expected the same b开发者_如何学Cehaviour while in Edit mode in both the Halo and Spark TextInput and TextArea components, and was surprised to find out that this is not the case.

I looked at the attributes of all four components to see if this is something that I need to configure, but couldn't find anything.

Is this something that needs to be coded?


Yes, this is something that will have to be coded. Here's the approach I would take:

  1. Create a custom component that extends the TextInput. Let's call it UndoTextInput.
  2. Add a new variable to UndoTextInput to store the original text of the TextInput. We'll call it originalText.
  3. Add an event listener on the focusIn event. In the focusIn event handler, store the current text value in the originalText variable.
  4. Add an event on the focusOut event. In the focusOut event, set the value of originalText back to an empty String.
  5. Add an event listener on the keyDown event. In the event listener, check to see if the Escape (Keyboard.ESCAPE) key was pressed. If it was, reset the text back to what was stored in originalText.

I hope this helps!

UPDATE:

Here's a quick example on how to do this using an Actionscript class. Feel free to modify as needed.

package
{
    import flash.events.FocusEvent;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    import spark.components.TextInput;

    public class UndoTextInput extends TextInput
    {
        private var originalText:String = "";

        public function UndoTextInput()
        {
            super();
            this.addEventListener(FocusEvent.FOCUS_IN, focusInEventHandler);
            this.addEventListener(FocusEvent.FOCUS_OUT, focusOutEventHandler);
            this.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyPress);
        }

        protected function focusOutEventHandler(event:FocusEvent):void
        {
            this.originalText = "";
        }

        protected function focusInEventHandler(event:FocusEvent):void
        {
            this.originalText = this.text;
        }

        protected function checkKeyPress(event:KeyboardEvent):void
        {
            if (event.keyCode == Keyboard.ESCAPE)
            {
                event.stopImmediatePropagation();
                this.text = this.originalText;
            }
        }
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号