2015-08-18 4 views
0

У меня есть ItemEditor с ComboxBox. Чтобы улучшить пользовательский интерфейс, я хотел бы выйти из ItemEditor каждый раз, когда пользователь выбирает значение в выпадающем списке. Поэтому ему не нужно щелкнуть по ячейке, чтобы подтвердить свой выбор.Flex dispatchEvent для выхода из ItemEditor

Я сделал это, но он не работает. Зачем ?

 private function comboChange(event:IndexChangeEvent):void 
     { 
      var dgOrder:DataGrid = owner as DataGrid; 
      var dgEvent:GridEvent = new GridEvent(GridEvent.GRID_CLICK); 
      dgEvent.preventDefault(); 
      dgOrder.dispatchEvent(dgEvent); 

     } 
    ]]> 
</fx:Script> 

<s:ComboBox id="ddlCurrency" width="100%" dataProvider="{lstCurrencies}" labelField="CurrencyCode" 
      prompt="Select a currency" change="comboChange(event)"></s:ComboBox> 

EDIT после Marcx комментарий:

override public function get value():Object { 
       trace("get value"); 
       ddlCurrency.selectedIndex = newCountryID; 
      if (ddlCurrency.selectedIndex == -1 || ddlCurrency.selectedItem.CurrencyID == -1){ 
       updateCurrency(data.OrderID, -1); 
       return ""; 
       } else if ((lstCurrencies[ddlCurrency.selectedIndex as int] as Object).CurrencyCode.toString() != ddlCurrency.selectedItem.CurrencyCode){ 
        return oldValue; 
       } else { 
        updateCurrency(data.OrderID, ddlCurrency.selectedItem.CurrencyID); 
        return ddlCurrency.selectedItem.CurrencyCode; 
       } 
      } 

private function comboChange(event:IndexChangeEvent):void 
      { 
       var dgOrder:DataGrid = owner as DataGrid; 
       newCountryID = ddlCurrency.selectedIndex; 
       dgOrder.setFocus(); 
      } 

Когда я выбираю значение на DROPDOWNLIST (это выпадающий раньше), combochange называется и ddlCurrency.selectedIndex является один Я только что выбрал, и как только функция get value() вызывается тем же самым ddlCurrency.selectedIndex, это предыдущий индекс. Это почему я сохраняю новый индекс в переменной, чтобы заставить новый индекс получить значение().

Надеюсь, я сделал свое ясное.

Заранее спасибо. Антуан.

ответ

0

Вы можете попробовать установить фокус на родительский элемент или непосредственно приложения ...

private function comboChange(event:IndexChangeEvent):void 
{ 
    var dgOrder:DataGrid = owner as DataGrid; 
    var dgEvent:GridEvent = new GridEvent(GridEvent.GRID_CLICK); 
    dgEvent.preventDefault(); 
    dgOrder.dispatchEvent(dgEvent); 
    // set the focus on the owner component 
    dgOrder.setFocus();    
} 

Из as3docs:

spark.components.DataGrid.setFocus(): недействительным

[Унаследовано] Устанавливает фокус на этот компонент. Компонент может, в свою очередь, передавать фокус на подкомпонент.

Примечание: Только элементы управления TextInput и TextArea показывают выделение, когда этот метод устанавливает фокус. Все элементы управления показывают выделение, когда пользователь переходит к элементу управления.

+0

Привет, это работает, но мне нужно сохранить в переменной выбранный индекс, потому что это возвращается к его предыдущей переменной непосредственно перед вызовом функции get(). –

+0

Я не понимаю проблему ... отредактируйте вопрос, добавив функцию getvalue, и почему вы должны сохранить переменную для selectedIndex .. спасибо – Marcx