我有一个显示数据的几列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,还是其他什么东西完全?
你需要做的itemRenderer类,然后从使用该类中引用你的DataGrid 这里描述的方法 。 然后,您可以调度从DataGrid的事件,这是很容易听在保持它的容器。 什么你不想做的是依靠鼓泡或试图直接听的itemRenderer。 你可能会想创建携带DataGrid行的数据属性,使你的事件侦听器可以快速访问这些信息自定义事件。
由于乔尔。 这是我想出了阅读那篇文章(我已经前仔细阅读)后的最终解决方案。 我要添加的按钮被点击到一个数组,它是另一个项目的属性的项目,所以我通过“其他项目”到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);
}
}
}