확인란을 확인/확인 해제 할 때 Flex 목록에서 항목 사전 이벤트를 트리거하려면 어떻게해야합니까?
-
21-08-2019 - |
문제
나는있다 List
드롭 인이있는 구성 요소 CheckBox
ItemRenderer 역할을하는 ItemDitor. 각 항목을 간단하게 표시합니다 CheckBox
레이블로.
그러나 목록 외부의 것을 클릭 할 때까지 항목 사전 이벤트가 트리거되지 않습니다. 확인란이 확인되거나 확인되지 않으면 트리거되고 싶습니다.
클릭 이벤트 핸들러에서 Listevent.item_edit_end를 수동으로 파견 할 생각 이었지만 ItemEditend 이벤트는 두 번 발송됩니다. 더 좋은 방법이 있어야합니다.
어떤 아이디어?
감사.
해결책
여기 내가 생각해 낸 해결책이 있습니다. 구성 요소를 ItemRenderer로 사용하도록 목록을 변경했습니다. 뿐, ItemRenderer 및 Itemeditor가 아닙니다. 그런 다음 mouseevent.click handler를 추가하여 항목 렌더의 목록의 함수를 호출하여 필요한 작업을 수행합니다.
내 목록 구성 요소 :
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 사람들은 분명히 사용자가 체크 박스를 몇 번 전환하기를 원한다는 개념을 생각해 냈을 것입니다. 얼마나 분명합니다!
내 해결책은 Enter에 치기와 동등한 키보드 이벤트를 종합하는 것입니다. 까다로운 부분은 Checkbox의 클릭 핸들러가 호출 될 때까지 목록 컨트롤이 편집기에 키보드 리스너를 등록하지 않았기 때문에 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)]);
}