2014-09-18 65 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屬性。