我怎么能知道在Flex的DataGrid的itemRenderer按钮被点击时?(How can I

2019-06-25 10:13发布

我有一个显示数据的几列DataGrid组件。 它显示一个按钮,允许用户采取行动相对于记录一个附加列。

<mx:DataGrid dataProvider="{myData}">
    <mx:columns>
        <mx:DataGridColumn dataField="firstName" headerText="First Name" 
            width="75" />

        <mx:DataGridColumn dataField="LastName" headerText=" Last Name" 
            width="150" />

        <mx:DataGridColumn dataField="phone" headerText="Phone" 
            width="120" />

        <mx:DataGridColumn headerText="" width="110">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:Box horizontalAlign="center" width="100%">
                        <mx:Button label="Take Action" />
                    </mx:Box>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

我需要执行父组件的操作,使用其他可用的数据有,但无关的DataGrid中的数据。

什么是赶在父组件按钮点击,并且知道它对应于什么记录的最好方法?

我应该使用一个自定义事件,或一个的itemEditor,还是其他什么东西完全?

Answer 1:

你需要做的itemRenderer类,然后从使用该类中引用你的DataGrid 这里描述的方法 。 然后,您可以调度从DataGrid的事件,这是很容易听在保持它的容器。 什么你不想做的是依靠鼓泡或试图直接听的itemRenderer。 你可能会想创建携带DataGrid行的数据属性,使你的事件侦听器可以快速访问这些信息自定义事件。



Answer 2:

由于乔尔。 这是我想出了阅读那篇文章(我已经前仔细阅读)后的最终解决方案。 我要添加的按钮被点击到一个数组,它是另一个项目的属性的项目,所以我通过“其他项目”到DataGrid组件的属性,从itemRenderer的函数调用进行反对动作:

/* CustomDataGrid.mxml */
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            public var otherData:Object;

            public function takeAction(item:Object):void
            {
                otherData["children"][0] = item;
            }
        ]]>
    </mx:Script>

    <mx:columns>
        <mx:DataGridColumn dataField="firstName" headerText="First Name" 
            width="75" />

        <mx:DataGridColumn dataField="LastName" headerText=" Last Name" 
            width="150" />

        <mx:DataGridColumn dataField="phone" headerText="Phone" 
            width="120" />

        <mx:DataGridColumn headerText="" width="110" 
            itemRender="ActionButtonItemRenderer" />
    </mx:columns>
</mx:DataGrid>

/* ActionButtonItemRenderer.as */
package
{
    import flash.events.MouseEvent;

    import mx.controls.Button;

    public class ActionButtonItemRenderer extends Button
    {
        public function ActionButtonItemRenderer()
        {
            super();

            label = "Take Action";
        }

        override protected function clickHandler(event:MouseEvent):void
        {
            super.clickHandler(event);

            var owner:CustomDataGrid = listData.owner as CustomDataGrid;

            owner.takeAction(data);
        }
    }
}


文章来源: How can I know when a Button in a Flex DataGrid itemRenderer is clicked?