我怎样才能触发一个itemEditEnd事件在Flex列表时,该复选框被选中/取消?
-
21-08-2019 - |
题
我有一个具有插入式List
的itemEditor兼作的itemRenderer一个CheckBox
组件。它显示每个项目作为一个简单的CheckBox
带有标签。
但是,itemEditEnd事件不会被触发,直到我的东西单击列表之外。我想一旦该复选框被选中或取消选中它触发。
我在想的人工调度的Click事件处理ListEvent.ITEM_EDIT_END,但随后itemEditEnd事件会得到出动两次。有一定有更好的方法来做到这一点。
任何想法?
感谢。
解决方案
下面是我想出了该溶液。我改变了我的列表中使用的组件作为的itemRenderer的只有的,不作为的itemRenderer和itemEditor的。然后我添加了一个MouseEvent.CLICK处理程序调用在列表的函数从的itemRenderer以执行必要的操作:
我的列表组件:
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);
}
}
}
其他提示
我刚刚进入这个运行。我使用的是自定义组件,而不是投递的方式,而这种使用渲染器作为编辑器时的作品。
请注意Flex的人显然想出了一个概念,即用户将要解决对国家承诺......在这一点,他们会敲回车键切换前的复选框以几十倍。多么明显!
我的解决办法是,以合成一个键盘事件,它等效于按下回车键。最棘手的部分是一个必须使用使用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)]);
}
不隶属于 StackOverflow