1

我有点难为我应该如何去做某事。

我有一个带有一堆列的 FlexDataGrid。其中一列有一个 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 回答