2010-03-18 4 views
2

У меня есть TextArea внутри компонента itemEditor, проблема в том, что при вводе текста в TextArea, если нажата клавиша ввода, itemEditor сбрасывает себя, перемещая каретку на следующая строка, как и ожидалось:TextArea используется как itemEditor неверно работает при нажатии клавиши ввода

<mx:List width="100%" editable="true" > 

    <mx:dataProvider> 
     <mx:ArrayCollection> 
     <mx:Array> 
      <mx:Object title="Stairway to Heaven" /> 
     </mx:Array> 
     </mx:ArrayCollection> 
    </mx:dataProvider> 

    <mx:itemRenderer> 
     <mx:Component> 
     <mx:Text height="100" text="{data.title}"/> 
     </mx:Component>      
    </mx:itemRenderer> 

    <mx:itemEditor> 
     <mx:Component> 
     <mx:TextArea height="100" text="{data.title}"/> 
     </mx:Component>      
    </mx:itemEditor> 

    </mx:List> 

</mx:Application> 

может кто-нибудь посоветовать, как я могу обойти это странное поведение и сделать клавишу ввода, ведут себя, как ожидалось?

Спасибо,

Крис

+0

Только что потерял 800 очков репутации в великолепной вставке StackOverflow. Довольно понравилось, и теперь я начинаю свою гонку до 0. Так начнем с щедрости по этому вопросу – ChrisInCambo

ответ

0

Похоже нажатием клавиши на [Ввод] в настоящее время обрабатывается вашей функцией списки по умолчанию, а не ваши визуализации элементов. Не уверен, что такое точный код для исправления, но я бы подумал, что вам нужно будет расширить элемент управления списком, который будет отменять функцию, когда пользователь нажимает [enter]

1

Хитрость заключается в прослушивании события ITEM_EDIT_END и предотвращении поведение списка по умолчанию, если причиной является NEW_ROW. Смотрите пример ниже:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="onComplete();"> 
    <mx:Script><![CDATA[ 
     import mx.events.ListEvent; 
     import mx.events.ListEventReason; 
     import mx.controls.TextArea; 

     private function onComplete():void 
     { 
      list.addEventListener(ListEvent.ITEM_EDIT_END, onEndEdit); 
     } 
     private function onEndEdit(e:ListEvent):void 
     { 
      if (e.reason == ListEventReason.NEW_ROW) 
       e.preventDefault(); 
      else 
       list.editedItemRenderer.data.title = TextArea(e.currentTarget.itemEditorInstance).text; 
     } 
    ]]></mx:Script> 
    <mx:List width="100%" editable="true" id="list"> 

     <mx:dataProvider> 
      <mx:Object title="Stairway to Heaven" /> 
     </mx:dataProvider> 

     <mx:itemRenderer> 
      <mx:Component> 
       <mx:Text height="100" text="{data.title}"/> 
      </mx:Component>      
     </mx:itemRenderer> 

     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextArea height="100" text="{data.title}"/> 
      </mx:Component>      
     </mx:itemEditor> 

    </mx:List> 

</mx:Application> 
0

Думаю, вы можете использовать «editorUsesEnterKey» из List.as (строка 544) Flex3.5

Флаг, который указывает, использует ли редактор пункт Введите ключ.

Смежные вопросы