如何在使用TextInput的insertText()时更新绑定?

时间:2011-07-19 13:14:58

标签: flash flex

我有一个简单的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中。

2 个答案:

答案 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;