Actionscript 3 如何取消Halo/Spark TextInput和TextArea组件中的编辑
我使用的是Flex4,ActionScript3 在AdvancedDataGrid组件中,当您在单元格中处于编辑模式时,可以按Escape键取消编辑(即返回到单元格中的上一个值) 在Halo和Spark TextInput和TextArea组件中,在编辑模式下,我预期会出现相同的行为,但惊讶地发现情况并非如此 我查看了所有四个组件的属性,看看这是否是我需要配置的东西,但找不到任何东西Actionscript 3 如何取消Halo/Spark TextInput和TextArea组件中的编辑,actionscript-3,textarea,flex4,textinput,flex-spark,Actionscript 3,Textarea,Flex4,Textinput,Flex Spark,我使用的是Flex4,ActionScript3 在AdvancedDataGrid组件中,当您在单元格中处于编辑模式时,可以按Escape键取消编辑(即返回到单元格中的上一个值) 在Halo和Spark TextInput和TextArea组件中,在编辑模式下,我预期会出现相同的行为,但惊讶地发现情况并非如此 我查看了所有四个组件的属性,看看这是否是我需要配置的东西,但找不到任何东西 这是需要编码的东西吗?是的,这是需要编码的东西。以下是我将采取的方法: 创建扩展TextInput的自定义组件
这是需要编码的东西吗?是的,这是需要编码的东西。以下是我将采取的方法:
UndoTextInput
originalText
聚焦事件中添加事件侦听器。在focusIn
事件处理程序中,将当前文本值存储在originalText
变量中
focusOut
事件上添加事件。在focusOut
事件中,将originalText
的值设置回空字符串keyDown
事件上添加事件侦听器。在事件侦听器中,检查是否按下了Escape(键盘.Escape
)键。如果是,请将文本重置回原始文本中存储的内容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;
}
}
}
}
嗨,杰森,谢谢你的及时回复。我只是想知道创建一个单独组件的好处。我改变了您的解决方案,仍然使用常规TextArea,创建了一个全局变量originalText,并在常规TextArea上设置focusIn/focusOut/keyUp侦听器。我知道拥有自定义组件有助于重用,这是我需要的,但是自定义组件中捕获的唯一组件是originalText变量吗?这意味着我还需要在使用自定义组件的每个mxml中定义focusIn/focusOut/keyUp吗?我希望你能理解我的问题。Bon@bon_t如果您创建了一个扩展TextArea组件的自定义组件,并添加了该组件所需的所有变量、EventListener等,那么您就不必在组件外部再次声明它们。如果您想在
数据组
、中继器
中使用自定义组件,或者只想在一个页面上有多个自定义组件,那么您还需要使用自定义组件。如果需要在组件上声明其他focusIn、focusOut等EventListener(例如,用于验证),则可以在mxml中声明包含该组件的那些。我希望这是有道理的您好,Jason,我是在创建一个以TextArea作为超类的ActionScript类,还是在创建一个mxml组件?谢谢你的耐心。嗨,杰森,是的,我会接受你的回答。我第一次开始做ActionScript类,但我不知道如何将focusIn、focusOut和keyUp放在那里。它们是公共方法吗?所以我现在使用的是mxml组件b/c,我知道如何定义这些属性。您能告诉我如何为AS类执行此操作吗?@bon\t我添加了一个关于如何使用Actionscript类执行此操作的快速示例。我希望有帮助!