我正在使用一个Datagrid,它有一个包含图像的itemRenderer:
protected static function hbox1_clickHandler(event:MouseEvent):void
{
//some action
}
<mx:DataGrid id="reportDG" dataProvider="{CDODReportsModel.instance.reportDataArrayCollectionObject}" color="black" horizontalScrollPolicy="on">
<mx:columns>
<mx:DataGridColumn headerText="info">
<mx:itemRenderer>
<fx:Component>
<mx:HBox horizontalAlign="center">
<mx:Image source="assets/images/i_info.png" scaleX="0.6" scaleY="0.6" click="hbox1_clickHandler(event)"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="NAME" headerText="NAME"/>
<mx:DataGridColumn dataField="TOTAL" headerText="TOTAL"/>
</mx:columns>
</mx:DataGrid>
我想点击发送一个事件,所以当我点击图片时,我会做一个动作。但是,这样做会给我一个错误。我做了一些搜索,建议的答案是使用outerDocument和ParentDoecument ..两者都没有用。
如何访问点击处理函数(我的代码中的hbox1_clickHandler())?
答案 0 :(得分:3)
我不认为如果你在Application类中这是可能的。 如果这是其他类,那么你可以这样做:
click="MyClass.hbox1_clickHandler()"
此外,这不是最好的想法内联项目渲染。最好的方法是扩展基础项目渲染器并创建自己的渲染器。您也可以扩展Flash Event类并自己制作。这样做可以为您的活动发送一些额外的数据。
但无论如何,使用你的方法代码将是这样的:
protected function reportDG_initializeHandler(event:FlexEvent):void
{
reportDG.addEventListener("clicked", hbox1_clickHandler);
function hbox1_clickHandler(event:Event):void
{
//some action
}
}
<mx:DataGrid initialize="reportDG_initializeHandler(event)">
<mx:columns>
<mx:DataGridColumn>
<mx:itemRenderer>
<fx:Component>
<mx:HBox>
<mx:Image click="dispatchEvent(new Event('clicked', true))"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
答案 1 :(得分:2)
只要函数声明为'public',它就可以使用outerDocument.functionName。在您的情况下,如果您将函数声明从protected更改为public,它将起作用。以下是示例代码[working]:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
public function hbox1_clickHandler(event:MouseEvent):void
{
Alert.show("ite works");
}
]]>
</fx:Script>
<mx:DataGrid id="reportDG" dataProvider="{new ArrayCollection(['A','B'])}" color="black" horizontalScrollPolicy="on">
<mx:columns>
<mx:DataGridColumn headerText="info">
<mx:itemRenderer>
<fx:Component>
<mx:HBox horizontalAlign="center">
<mx:Button label="Button" click="outerDocument.hbox1_clickHandler(event)"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="NAME" headerText="NAME"/>
<mx:DataGridColumn dataField="TOTAL" headerText="TOTAL"/>
</mx:columns>
</mx:DataGrid>
</s:WindowedApplication>