Flex: проблема разрыва строки с spark.components.TextArea внутри MXDataGridItemRenderer - PullRequest
0 голосов
/ 08 января 2011

У меня есть DataGrid с MXDataGridItemRenderer, примененным как itemEditor к одному из столбцов. Редактор включает в себя элемент управления spark.components.TextArea.

По умолчанию любой редактор текстовых элементов сетки данных закрывается при нажатии клавиши [enter]. Помня об этом; Что я хочу сделать, это:

  1. Предотвратить закрытие редактора по клавише [SHIFT + ENTER], но принять перенос строки (я могу это сделать, см. Код ниже)
  2. Закройте редактор клавишей [ENTER], но не принимайте перенос строки (не удалось этого достичь)

Вот текущий код в MXDataGridItemRenderer:

<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx" 
                      focusEnabled="true" 
                      >
<fx:Script>
    <![CDATA[
        protected function onTxtDataKeyDown(event:KeyboardEvent):void
        {
            if (event.keyCode == 13)
            {
                if (event.shiftKey)
                {
                    //Prevent editor from closing on [SHIFT+ENTER] key but accept the linebreak
                    event.stopImmediatePropagation(); // » works
                }
                else
                {
                    //Close the editor on [ENTER] key but do not accept the linebreak
                    event.preventDefault(); // » does not work
                }
            }
        }

    ]]>
</fx:Script>

<s:TextArea id="txtData" paddingTop="3" lineBreak="explicit"
            text="{dataGridListData.label}" 
            verticalScrollPolicy="auto" horizontalScrollPolicy="off" 
            keyDown="onTxtDataKeyDown(event)" 
            />

Я также попробовал событие textInput, но это не сработало. Итак: Как я могу предотвратить разрыв строки при закрытом редакторе по клавише [enter] ?

Любая помощь приветствуется. Спасибо.

РЕДАКТИРОВАТЬ: Если я изменю spark.components.TextArea на mx.controls.TextArea, вторая часть с event.preventDefault() будет работать, как и ожидалось, но тогда первая часть, где SHIFT + ENTER принимает разрыв строки, будет не работает.

Ответы [ 2 ]

1 голос
/ 08 января 2011

Согласно справке API keyDown можно отменить только в AIR, а не в Flash Player.Для кого вы разрабатываете?Я не смог отменить ни keyDown, ни textinput в AIR.Может быть ошибка.Почему вы не регистрируете дефект в Adobe и не видите, что они говорят?

Обновление : я подтвердил, что это действительно ошибка в spark.components.TextArea.В потоке http://forums.adobe.com/thread/703195 говорится о подобной проблеме. Ошибка также зарегистрирована в Flex - http://bugs.adobe.com/jira/browse/SDK-25542.

Обходной путь должен использовать mx.controls.TextArea.

0 голосов
/ 24 января 2011

Я не очень хороший английский. Пожалуйста, смотрите код.

<!--snip-->
<fx:Script>
    <![CDATA[

        protected function textArea_creationCompleteHandler(event:FlexEvent):void{
            textArea.addEventListener(TextOperationEvent.CHANGING,onChangingHandler);
        }

        //This event is faster than KEY_DOWN.
        private function onChangingHandler(event:TextOperationEvent):void {
            if(event.operation is SplitParagraphOperation){
                //SplitParagraphOperation only cancel.
                event.preventDefault();
            }
        }

    ]]>
</fx:Script>
  <s:TextArea id="textArea"
                    width="100"
                    creationComplete="textArea_creationCompleteHandler(event)"
                    height="60"
                    />
  <!--snip-->
...