选中/取消选中CheckBox时,如何在Flex列表中触发itemEditEnd事件?

时间:2009-06-30 16:37:09

标签: flex actionscript-3 list checkbox itemeditor

我有一个List组件,该组件具有drop-in CheckBox itemEditor,也可用作itemRenderer。它将每个项目显示为带有标签的简单CheckBox

但是,在我点击List之外的内容之前,itemEditEnd Event不会被触发。我希望在选中或取消选中CheckBox后触发它。

我在考虑在CLICK事件处理程序中手动调度ListEvent.ITEM_EDIT_END,但随后将调度itemEditEnd事件两次。必须有更好的方法来做到这一点。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这是我提出的解决方案。我更改了我的列表以将组件用作itemRenderer ,而不是itemRenderer和itemEditor。然后我添加了一个MouseEvent.CLICK处理程序来从itemRenderer调用List中的函数来执行必要的操作:

我的列表组件:

package
{
    import mx.controls.List;
    import mx.core.ClassFactory;

    public class CustomCheckBoxList extends List
    {
        public function CustomCheckBoxList()
        {
            super();

            itemRenderer = new ClassFactory(CheckBoxRenderer);
        }

        public function dispatchSelectionEvent(item:Object, selected:Boolean):void
        {
            // Take action here...
        }
    }
}

我的ItemRenderer:

package
{
    import flash.events.MouseEvent;

    import mx.controls.CheckBox;

    public class CheckBoxRenderer extends CheckBox
    {
        public function CheckBoxRenderer()
        {
            super();
        }

        override protected function clickHandler(event:MouseEvent):void
        {
            super.clickHandler(event);

            CustomCheckBoxList(listData.owner).dispatchSelectionEvent(data, selected);
        }
    }
}

答案 1 :(得分:0)

我刚刚碰到这个。我使用自定义组件而不是插入方法,这在使用渲染器作为编辑器时起作用。

请注意,Flex人员显然提出了这样一种观念,即用户希望在确定要提交的状态之前将其复选框切换几次......此时他们会按Enter键。多么明显!

我的解决方案是合成键盘事件,相当于按Enter键。棘手的部分是必须使用callLater()方法来调度事件,因为在调用复选框的单击处理程序之后,列表控件才会在编辑器上注册其键盘侦听器。这是我的自定义渲染器/编辑器组件中的复选框的单击处理程序:

private function onClick(value:Object):void {
    newValue = value;
    var list:ListBase = ListBase(owner);
    list.callLater(dispatchEvent, [new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, Keyboard.ENTER, Keyboard.ENTER)]); 
}