从datagrid里面的按钮调用函数

时间:2014-09-18 15:47:23

标签: flex actionscript

我的MXML中有这个片段:

...

<mx:Script source="main.as" />

...

<mx:Button id="works" click="someClick()" />
<xDComponents:DataGrid id="tp_list" width="100%" height="100%">
    <xDComponents:columns>
        <mx:DataGridColumn dataField="barcode" headerText="{_s('Barcode')}" />
        <mx:DataGridColumn width="10">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:Button label="-" click="someClick()" />
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn> 
    </xDComponents:columns>
</xDComponents:DataGrid>

...

xDComponents:DataGrid派生自DataGrid

main.as我有:

private function someClick():void {
    // do stuff
}

在第一个Buttonid="works")中,代码可以工作,并且处理程序被调用。但是在DataGrid中,我收到了错误

  

调用可能未定义的方法someClick

如何使我的功能可用于数据网格内的按钮?

2 个答案:

答案 0 :(得分:2)

您可以使用outerDocument属性访问itemRenderer外部。

案例中的例子:

<mx:Button label="-" click = "{ outerDocument.someClick() }" />

答案 1 :(得分:1)

正确的解决方案是在单击按钮时调度事件处理程序并在数据网格上或事件链上的任何位置侦听该事件。 当前代码无法正常工作,因为项呈示器被编译为一个单独的类,并且它无法访问您要调用的方法,因此呈现器无法访问它外部,解决方案是调度自定义事件。 我不会在这里粘贴一个例子,只研究热点制作和发送自定义事件,还要注意事件的bubles属性。