当我在采用 DataGridEvent
的函数中使用 Alert.show
时,我出现了奇怪的行为。
当执行Alert.show
时,该函数会运行两次。
这是代码:
private function onItemEnd(event:DataGridEvent):void
{
var pattern:RegExp =/[^a-z0-9A-ZéèçàêïôëËÉÊÈìíîïÌÍÎÏÇùúûü]/;
var res:Boolean=pattern.test(texteSaisi);
if(res==true){
event.reason = DataGridEventReason.CANCELLED;
Alert.show("Le nom de l'option ne doit pas contenir des caractère spéciaux.");
}else{
if (event.dataField == "libelle"){
question.libelle = texteSaisi;
}else if (event.dataField == "description") {
question.description = texteSaisi;
}
<mx:DataGrid
draggableColumns="false"
dataProvider = "{model.obtenirListeOptionsTarificationProposition}"
id = "gridOptions"
rowCount = "10"
doubleClickEnabled = "true"
itemClick = "onItemClick(event)"
change = "onChange(event)"
width = "80%"
editable = "true"
itemEditEnd = "onItemEnd(event)">
当调用此函数时,屏幕上出现两个警报,我不知道为什么。
最佳答案
我怀疑将警报与 itemEditEnd
事件结合使用是有问题的。编写了一个简单的测试用例,其行为不同(我的似乎进入了无限循环)。
问题是这样的:
itemEditEnd
事件可以通过多种方式调度:键盘交互(在编辑单元格时按 Tab 键或按 Enter 键)、鼠标交互等。我开始编辑单元格。然后我点击 Tab/Enter 或单击另一个单元格。这会生成
itemEditEnd
事件并将焦点移动到新的可编辑单元格。在
itemEditEnd
事件的事件处理程序中,会显示Alert
。此弹出窗口将从该可编辑单元格中移除焦点...从而调度第二个itemEditEnd
事件。
在下面的测试应用程序中,我实际上创建了一个无限循环。
如果您需要在 itemEditEnd
事件之后显示警报,也许您可以在事件处理程序中添加一些逻辑(以便它第二次立即返回)。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600"
creationComplete="onCreationComplete()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private function onCreationComplete():void
{
grid.dataProvider=createCollection();
}
private function createCollection():ArrayCollection
{
var tmp:Array = [];
for (var i:int = 1; i<11; i++)
{
tmp.push({ data: Math.random()*100, label: i.toString() + " label" });
}
return new ArrayCollection(tmp);
}
private function onItemEditEnd():void
{
Alert.show("item edit end");
}
]]>
</fx:Script>
<mx:DataGrid id="grid" itemEditEnd="onItemEditEnd()" editable="true" />
</s:Application>
关于apache-flex - 为什么 Alert.show() 给我两个警报框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052451/