Странная прокрутка после изменения содержимого s: TextArea - PullRequest
0 голосов
/ 04 августа 2011

У меня странная проблема с прокруткой TextArea во Flex 4.1. Рассмотрим следующий код, чтобы показать ¶ в конце строки содержимого TextArea:

    [Bindable]
    public var text:String;

    public var applied:Boolean = false;

    protected function apply(event:MouseEvent):void
    {
        if (!applied)
        {   
            text = text.replace(/\n/g,"¶\n");
            applied = true;
        }
        else
        {
            text = text.replace(/¶\n/g, "\n");
            applied = false;
        }
    }
...
<s:VGroup>      
    <s:TextArea height="200" width="200" text="@{text}"/>
    <s:Button enabled="true" label="go!" click="apply(event)"/>
</s:VGroup>

Когда я нажимаю кнопку в первый раз, к тексту добавляются подушки. Я только за исключением перемещения нескольких строк из-за переноса слов, но TextArea делает слишком большой «прыжок» в очень отдаленное место в тексте. Кажется, что это проблема в компоненте - иногда переход является событием в начале содержащегося текста. Если впоследствии я добавлю или уберу подушку с помощью кнопки, прокрутка будет в порядке.

Есть ли у вас какие-либо идеи, как я могу выполнять регулярные выражения для замены текста TextArea, не испытывая таких странных скачков вокруг содержимого? Заранее спасибо!

1 Ответ

1 голос
/ 04 августа 2011

Я протестировал предоставленный вами код и не заметил каких-либо странных «скачков» в позиции прокрутки TextArea.

Однако, если вам нужно вручную изменить позицию прокрутки, чтобы она оставалась в определенной точке (например, в верхней части TextArea), вы всегда можете обновить свойство позиции прокрутки вашей текстовой области после применения пяток:

protected function apply(event:MouseEvent):void
    {
        if (!applied)
        {   
            text = text.replace(/\n/g,"¶\n");
            applied = true;
            textArea.scroller.verticalScrollBar.value = 0; //Set to the desired scroll position
        }
        else
        {
            text = text.replace(/¶\n/g, "\n");
            applied = false;
            textArea.scroller.verticalScrollBar.value = 0;
        }
    }

...
<s:VGroup>      
    <s:TextArea id="textArea" height="200" width="200" text="@{text}"/>
    <s:Button enabled="true" label="go!" click="apply(event)"/>
</s:VGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...