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 показывают выделение, когда этот метод устанавливает фокус. Все элементы управления выделяются, когда пользователь вкладывает их в элемент управления.