Flex数据网格中存在嵌套项时的事件顺序

时间:2011-06-07 13:27:31

标签: flex datagrid flex3

假设我有一个数据网格,并且有一个方法附加到点击网格行中的任何项目。现在,表格行中的一些项目也是按钮。这些中的每一个都与不同的动作相关联。我们只希望执行其中一个操作。以下是一些示例代码:

<mx:DataGrid id="dataGrid" dataProvider="{data}" itemClick="selectRow()">
    <mx:columns>
        <mx:DataGridColumn dataField="name" />
        <mx:DataGridColumn id="choose" headerText="Make a choice">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <renderers:MyButton label="Choose Wisely" click="{outerDocument.choiceMade()}"/>
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

我的问题是:

当用户选择行中的按钮项时,将执行两种方法(selectRow&amp; choiceMade)。由于两种方法都是    执行,是两个固定的顺序    不知何故?是按钮方法(choiceMade)总是    在行方法(selectRow)之前触发,是它    相反,或者是他们    两者都是异步执行的?

我正在质疑的是,我们目前有一个成员变量来跟踪进行了哪个选择,并忽略了另一个方法的内容(方法的else部分重置了这个值)。现在,如果方法碰巧以不同的顺序(或同时)执行,则行为将是不可预测的。

我没有很好地处理所有这些如何工作,所以任何关于Flex如何激发这些方法的光都将受到赞赏。成员变量标志是这样做的方式(闻起来很糟糕)?

1 个答案:

答案 0 :(得分:1)

两个事件都将被派遣,并且几乎同时发生。在处理事件时,您真的不应该依赖执行顺序。这不是很好的做法。

至于你的具体问题,你可以这样做:

<renderers:MyButton label="Choose Wisely" 
                    click="event.stopImmediatePropagation(); 
                           outerDocument.choiceMade()" />

它将阻止click事件通过displaylist传播,因此datagrid将不会收到itemclick事件。单击按钮时不会执行selectrow()方法。