2012-03-08 27 views
0

DataGridコンポーネントのインラインでitemRendererカスタムコンポーネントがあります。チェックボックスがチェックされているかチェックされていない場合(itemRendererコンポーネント内の)Containingクラス(DataGridと同じレベル)にイベントを発生させる必要があります。どうすればいい?ItemRendererのチェックボックスがクリックされたときにイベントFireをクリックします。

<mx:DataGrid id="dg" width="100%" dataProvider="{dgProvider}" editable="true" itemClick="dg_itemClickHandler(event)"> 
    <mx:columns> 
     <mx:DataGridColumn dataField="selected" width="100" headerText="Include:" textAlign="center" editable="true" editorDataField="cbSelected" rendererIsEditor="true"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <!-- We need this canvas because it centers the checkbox: --> 
        <mx:Canvas width="100" textAlign="center"> 
         <mx:Script> 
          <![CDATA[ 
           // Define a property for returning 
           // the new value to the cell. 
           [Bindable] 
           public var cbSelected:Boolean; 


           protected function selectedCheckbox_clickHandler(event:MouseEvent):void 
           { 
            cbSelected = selectedCheckbox.selected; 
           } 
          ]]> 
         </mx:Script> 
         <mx:CheckBox 
          id="selectedCheckbox" 
          selected="{data.selected}" 
          horizontalCenter="0" 
          click="selectedCheckbox_clickHandler(event)" /> 
        </mx:Canvas> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
</mx:columns> 

答えて

1

ここで遊んでいくつかのものがあります...最初はあなたが求めて何であり、第二は、私はあなたが本当に必要だと思うものです。

まず「Containing Class」と言うと、私はDataGridの親を参照していると思います。これはitemRendererの親とは非常に異なります。 DataGridの親がitemRendererのコードからイベントを送出するようにするには、outerDocumentを使用します。

protected function selectedCheckbox_clickHandler(event:MouseEvent):void 
{ 
    cbSelected = selectedCheckbox.selected; 
    outerDocument.dispatchEvent(new Event('myEvent')); 
} 

私はouterDocumentのユーザーがカプセル化を解除するため、ユーザーが気に入らないのです。

ただし、親にリスナーを置く必要があり、親がイベントを発生させるかどうかは関係ありません。その場合、あなたは自分のイベントのバブルプロパティを使用して泡イベントを作成することができます

protected function selectedCheckbox_clickHandler(event:MouseEvent):void 
{ 
    cbSelected = selectedCheckbox.selected; 
    outerDocument.dispatchEvent(new Event('myEvent',true)); 
} 

あなたはすべての方法メインアプリケーションまでの階層チェーンのいずれかのコンポーネントにイベントをリッスンすることができます。これには、DataGridとDataGridの親コンテナが含まれます。イベントはヒンティングMXMLコードに表示されませんが、あなたはaddEventListenerメソッドを使用してイベントリスナを追加することができます。

dataGrid.addEventListener('myEvent',myEventListener); 

あなたがするitemRendererから何かをする親に伝える必要があります

。レンダラーからイベントをバブリングすることが私の好ましいアプローチです。

関連する問題