Как установить свойство текста для keyDownHandler для TextInput в Flex 3 - PullRequest
2 голосов
/ 11 октября 2011

Просто и прямо. Я расширил mx.controls.TextInput, чтобы создать пользовательский компонент с другим поведением. Я пытаюсь установить свойство text для keyDownHandler (), и по какой-то причине оно не работает так, как я ожидал. Текст на компоненте просто игнорирует это изменение. Я использую Flex 3.6. Ниже приведен простой пример кода, который объясняет, что происходит:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:customcomponent="com.test.customcomponent.*">
    <customcomponent:TextTest x="20" y="20"/>   
</mx:Application>

и ниже класса AS AS:

package com.test.customcomponent
{
    import flash.events.KeyboardEvent;

    import mx.controls.TextInput;

    public class TextTest extends TextInput
    {
        public function TextTest()
        {
            super();
        }

        override protected function keyDownHandler(event:KeyboardEvent):void{
            text = "lol. It doesn't work";
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 мая 2012

Чтобы иметь возможность предотвратить обработку по умолчанию, вы должны иметь достаточно высокий приоритет для вашего обработчика (которого у keyDownHandler () нет). Это означает, что вам нужно зарегистрировать свой собственный метод с приоритетом> 0.

Вы можете попробовать вот так:

public function MyTextInput() {
    addEventListener(KeyboardEvent.KEY_DOWN, yourHandler, 
                     false, EventPriority.BINDING, true);
    ...
}

private function yourHandler(event : KeyboardEvent) : void {
    // stop further handling
    event.preventDefault();
    event.stopImmediatePropagation();
    event.stopPropagation();  

    // do your work here
    text = ...;
}
0 голосов
/ 11 октября 2011

Вам необходимо предотвратить событие нажатия клавиши по умолчанию.

    override protected function keyDownHandler(event:KeyboardEvent):void{
        text = "lol. It doesn't work";
        event.preventDefault();
        event.stopImmediatePropagation();
        event.stopPropagation()
    }
...