我对如何做某事感到有点困惑。
我有一堆带有一堆列的FlexDataGrid。其中一列有一个ItemRenderer。我希望此列中的所有单元格都能监听事件。我想要收听的事件是有人开始编辑ItemRenderered单元所在的同一行中的单元格。
所以我在我的ItemRenderer中有这个代码,它应用于列中的每个单元格:
this.addEventListener(FlexDataGridEvent.ITEM_EDIT_BEGINNING, showPopUp);
调用showPopUp时,此ItemRenderer下会出现一个按钮。
问题是,我不知道如何使eventListener工作。如何在另一个单元格中发生ITEM_EDIT_BEGINNING事件时,如何知道此项目渲染器?
我完全被难倒了。
谢谢!
答案 0 :(得分: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!
}
}