0

我有一个带有 ComboxBox 的 ItemEditor。为了改善用户体验,我想每次用户在组合框中选择一个值时退出 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>

在 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 就是前一个指数。这就是为什么我将新索引保存在变量中以强制获取值()中的新索引。

我希望我把自己说清楚了。

提前致谢。安托万。

4

1 回答 1

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():void

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

注意:当此方法设置焦点时,只有 TextInput 和 TextArea 控件会突出显示。当用户选择控件时,所有控件都会突出显示。

于 2015-08-27T10:43:22.917 回答