我有一个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控件显示高亮。当用户将选项卡指向控件时,所有控件都会显示高亮显示。