1

私は何かをどうやってやるべきかについて少し困惑しています。

たくさんの列を持つFlexDataGridがあります。列の1つにItemRendererがあります。この列のすべてのセルでイベントをリッスンする必要があります。私が聞きたいイベントは、誰かがItemRendereredセルと同じ行のセルの編集を開始したときです。

したがって、ItemRendererに次のコードがあり、列の各セルに適用されます。

this.addEventListener(FlexDataGridEvent.ITEM_EDIT_BEGINNING, showPopUp);

showPopUpが呼び出されると、このItemRendererの下にボタンが表示されます。

問題は、そのeventListenerをどのように機能させることができるかわからないことです。ITEM_EDIT_BEGINNINGイベントが別のセルで発生していることをこのアイテムレンダラーに知らせるにはどうすればよいですか?

私は完全に困惑しています。

ありがとう!

4

1 に答える 1

1

アイテムレンダラーは実際には別のコンポーネントであるため、thisキーワードを使用してディスパッチする場合、他のセル/アイテムレンダラーには表示されません。

おそらくあなたが予想していたよりも少し複雑ですが、これはあなたがそのようなことを達成する方法です

1)行番号を渡すことができるカスタムイベントを作成する必要があります。このようなものが機能します:

package
{
    import flash.events.Event;

    public class EditRowEvent extends Event
    {
        public function EditRowEvent(type:String, rowEditingIn:Number, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            rowEditing = rowEditingIn;
            super(type, bubbles, cancelable);
        }

        public var rowEditing : Number;
    }
}

2)すべてのアイテムがレンダリングできるものに編集する場合は、ディスパッチする必要があります。親グリッドのようなもの:

DataGrid(this.parentDocument).dispatchEvent( new EditRowEvent( 'beginEdit', this_renderers_row ) );

3)親でもこのイベントをリッスンする必要があります(アイテムレンダラーが初期化されるときにこれを行います):

protected function onCreationComplete(event:FlexEvent=null):void
        {
            DataGrid(this.parentDocument).addEventListener( 'beginEdit' , handleEditOnRow );
        }

4)その特定のアイテムレンダラーの行で編集が開始されたときに何をしたいのかを処理します

        public function handleEditOnRow ( event : EditRowEvent ) : void {
            if( this_renderers_row == event.rowEditing ){
                // code to execute when someone starts editing this row!
            }
        }
于 2012-07-13T21:58:47.340 に答える