我有一个简单的TextInput派生控件,在Ctrl + Shft + B上插入一些文字:
package controls
{
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import spark.components.TextInput;
public class MyTextInput extends TextInput
{
private const BAM:String = "BAM!";
public function MyTextInput()
{
super();
this.addEventListener(KeyboardEvent.KEY_DOWN, interceptKey);
}
protected function interceptKey(event:KeyboardEvent):void
{
if((event.keyCode == Keyboard.B) && event.ctrlKey && event.shiftKey)
{
// Insert some text on Ctrl+Shft+B
event.preventDefault();
this.insertText(BAM);
}
}
}
}
我有一个使用控件的简单Flex应用程序:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:controls="controls.*"
width="230" height="120"
>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
[Bindable]
private var text:String;
]]>
</fx:Script>
<controls:MyTextInput left="10" right="10" top="10" text="@{text}"/>
<s:Label left="10" right="10" bottom="10" text="{text}"/>
</s:WindowedApplication>
标签字段会更新单击键,但在调用Ctrl + Shft + B时,预期文本会出现在TextInput派生控件中,但不会出现在Label中。
答案 0 :(得分:0)
务必发送'已更改'事件:
protected function interceptKey(event:KeyboardEvent):void
{
if((event.keyCode == Keyboard.B) && event.ctrlKey && event.shiftKey)
{
// Insert some text on Ctrl+Shft+B
event.preventDefault();
this.insertText(BAM);
dispatchEvent(new Event("textChanged"));
}
}
我假设insertText方法的实现不使用set text方法,它永远不会触发事件,因此永远不会触发绑定。
答案 1 :(得分:0)
不要使用insertText。我相信这只是为了视觉外观,但从未真正修改过'text'属性。如果有任何内容将insertText(BAM);
替换为text += BAM;
。