Flex dispatchEvent для выхода из ItemEditor

У меня есть ItemEditor с ComboxBox. Чтобы улучшить взаимодействие с пользователем, я хотел бы выходить из 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>

РЕДАКТИРОВАТЬ после комментария Маркса:

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 - предыдущий индекс. Поэтому я сохраняю новый индекс в переменной, чтобы заставить новый индекс получить значение ().

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

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

1 ответ

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

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 (): недействительным

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

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

Другие вопросы по тегам