확인란을 확인/확인 해제 할 때 Flex 목록에서 항목 사전 이벤트를 트리거하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1064716

문제

나는있다 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)]); 
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top