Что я могу сделать, чтобы привязка обновлялась при использовании insertText () TextInput? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть простой производный элемент управления 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, но не в метке.

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

Не используйте insertText. Я полагаю, что это только для визуального представления, но никогда фактически не изменяет свойство 'text'. Если что-нибудь замените insertText(BAM); на text += BAM;.

0 голосов
/ 19 июля 2011

Обязательно отправьте событие «изменено»:

    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, который никогда не вызывает событие, поэтому никогда не вызывает привязку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...