Spark ComboBox - проблема с отображением текста для нового элемента? - PullRequest
0 голосов
/ 17 сентября 2010

Я играл с s: ComboBox и вообще мне они очень нравятся.Хотя одна деталь сводит меня с ума - скорее всего, из-за недостатка знаний в предмете - это то, что если я пытаюсь добавить новый элемент в мой поставщик данных в changeHandler (зарегистрированном в событии change), текст для ComboBox textInput исчезает- хотя дополнение пункта работает отлично.Интересно, что та же самая операция работает нормально, если она вызывается нажатием на кнопку, то есть после публикации событие изменения было обработано, и текст не исчезал.Вот некоторый код из здесь , который показывает это

<?xml version="1.0" encoding="utf-8"?>
<!-- dpcontrols\spark\SparkCBAddItem.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx">
 <s:layout>
  <s:VerticalLayout paddingTop="5" paddingLeft="5"/>
 </s:layout> 

 <fx:Script>
  <![CDATA[
   import mx.collections.ArrayList;

   import spark.events.IndexChangeEvent;

   [Bindable]
   public var myDP:ArrayList = new ArrayList(["Red", "Orange", "Yellow", "Blue", "Green"]);

   // Event handler to determine if the selected item is new.
   protected function myCB_changeHandler(event:IndexChangeEvent):void
   {
    // Determine if the index specifies a new data item.
    if(myCB.selectedIndex == spark.components.ComboBox.CUSTOM_SELECTED_ITEM)
    {
     // Add the new item to the data provider.
     myCB.dataProvider.addItem(myCB.selectedItem);
    }
   }

   protected function button1_clickHandler(event:MouseEvent):void
   {
    // Determine if the index specifies a new data item.
    if(myCB.selectedIndex == spark.components.ComboBox.CUSTOM_SELECTED_ITEM)
    {
     // Add the new item to the data provider.
     myCB.dataProvider.addItem(myCB.selectedItem);
    }
   }

  ]]>
 </fx:Script>

 <s:Label text="The selected index is: {myCB.selectedIndex}"/>
 <s:Label text="The selected item is: {myCB.selectedItem}"/>

 <s:ComboBox id="myCB" width="140" change="myCB_changeHandler(event);" dataProvider="{myDP}"/> 
 <s:Button label="Button" click="button1_clickHandler(event)"/>

</s:Application>  

. Если вы удалите обработчик изменений, вы увидите, что добавление нового элемента и затем нажатие на кнопку сохраняет новый элемент вtextInput при добавлении элемента в провайдер данных, что не происходит, если вы просто вводите новый элемент и нажимаете ввод.

Заранее благодарен за любую помощь!

1 Ответ

2 голосов
/ 17 сентября 2010

Хорошо, я полагаю, что callLater с содержимым myCB_changeHandler, похоже, справляется с задачей, т. Е.

private function later(event:IndexChangeEvent):void
{
    // Determine if the index specifies a new data item.
    if(myCB.selectedIndex == spark.components.ComboBox.CUSTOM_SELECTED_ITEM)
    {
        // Add the new item to the data provider.
        myCB.dataProvider.addItem(myCB.selectedItem);
    }

}

// Event handler to determine if the selected item is new.
protected function myCB_changeHandler(event:IndexChangeEvent):void
{
      callLater(later, [event]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...