Flex dispatchEvent to exit an 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();
            }

当我在下拉列表中选择一个值时(它之前是一个组合框),将调用combochange和ddlCurrency。selectedIndex就是我刚刚选择的那个,一旦调用了getvalue()函数,就调用了同一个ddlCurrency。selecteindex是前一个索引。这就是为什么我将新索引保存在一个变量中,以便在get value()中强制使用新索引。

我希望我已经说清楚了。

提前感谢。安东尼。

您可以尝试将焦点设置在父元素上或直接设置在应用程序上…

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();             
}

From the as3docs:

spark.components.DataGrid.setFocus():空白

[Inherited]将焦点设置为该组件。组件又可以将焦点传递给子组件。

注意:当此方法设置焦点时,只有texttinput和TextArea控件显示高亮。当用户将选项卡指向控件时,所有控件都会显示高亮显示。

相关内容

  • 没有找到相关文章

最新更新