2014-09-18 36 views
0

我在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:DataGridDataGrid派生)

main.as我:

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

在第一个Buttonid="works"),代码工作,处理程序被调用。在DataGrid不过,我得到的错误

呼叫可能未定义的方法someClick

我怎样才能让我的可用功能在数据网格中的按钮?

回答

2

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

例子,你的情况:

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

虽然这个工作,它的架构不佳。 itemRenderer本身就是一个独立的类,这种方法意味着它非常紧密地耦合到父类MXML类。 – Brian 2014-09-22 16:57:14

1

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