チェックボックスが/未チェックチェックされているとき、どのように私は、Flex一覧でitemEditEndでイベントをトリガすることができますか?

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

質問

Iは、ドロップインListのitemEditorものitemRendererとして機能有しCheckBox成分を有します。これは、ラベルの付いたシンプルなCheckBoxとして各項目を表示します。

私はリストの外で何かをクリックするまで、

しかし、itemEditEndでイベントがトリガされません。私は、チェックボックスがオンまたはオフされると、それがトリガ欲しいます。

私は手動でクリックイベントハンドラでListEvent.ITEM_EDIT_ENDでの派遣を考えていたが、その後itemEditEndでイベントが二回派遣になるだろう。お奨めはこれを行うには良い方法があります。

任意のアイデア?

感謝します。

役に立ちましたか?

解決

ここで私が思いついたのソリューションです。私は、itemRendererにののみのように、ではないのitemRendererとのitemEditorとしてコンポーネントを使用するために私のリストを変更しました。私はその後、必要なアクションを実行するためのitemRendererから一覧で関数を呼び出すためにMouseEvent.CLICKハンドラを追加します:

マイリストコンポーネント:

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キーを打つだろうに...コミットする状態にセトリングする前にチェックボックスを数回切り替えるしたいという考えを思い付いたことに注意してください。どのように明らかに!

私のソリューションは、Enterキーを押すと同等であるキーボードイベントを合成することです。トリッキーな部分は、リストコントロールは、チェックボックスのクリックハンドラが呼び出されるまで、エディタ上のキーボードのリスナーを登録していないので、1がイベントを送出するために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