【问题标题】:Flex dispatchEvent to exit an ItemEditorFlex dispatchEvent 退出 ItemEditor
【发布时间】:2015-08-18 09:20:13
【问题描述】:

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

我希望我说清楚了。

提前致谢。 安托万。

【问题讨论】:

    标签: actionscript-3 apache-flex dispatchevent itemeditor


    【解决方案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():void

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

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

    【讨论】:

    • 嗨,它可以工作,但我需要将组合选择的索引保存在一个变量中,因为这会在调用 get value() 函数之前回到他之前的变量。
    • 我不明白这个问题...请编辑添加 getvalue 函数的问题以及为什么必须为 selectedIndex 保留一个变量。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2012-03-19
    • 2011-03-05
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多