2011-09-01 15 views
0

誰でも知っていますか、Flex ComboBox(または類似のもの)のItemClickイベントをキャッチする方法はありますか?たぶん、何かトリックがあります:)私はそれをカスタマイズすることができることを認識していますが、これは私のケースに合っていません。お時間をItemClickイベントはフレックスコンボボックス

感謝:)

+0

いいえニックネーム、少し気になります;)なぜitemClickが必要ですか?オリジナルの問題に別の解決策があるかもしれません。 – moropus

+0

ありがとう:)おそらくあなたは正しいですが、私はまだこれを動作させることに興味があります。唯一の解決策はカスタマイズですか? – Antenka

+0

どのようなコンボボックスを使用しますか? MXまたはスパーク? – Constantiner

答えて

1

参考になり、プライベートだと思いますITEM_CLICKにリスナーがプライベートで、リスト自体もプライベートである:

private var _dropdown:ListBase; 

private function getDropdown():ListBase 
{ 
     // ... 

     _dropdown = dropdownFactory.newInstance(); 

     // ... 

     _dropdown.addEventListener(ListEvent.ITEM_CLICK, dropdown_itemClickHandler); 

     // .... 
} 

private function dropdown_itemClickHandler(event:ListEvent):void 
{ 
    if (_showingDropdown) 
    { 
     close(); 
    } 
} 

だから、あなたがすることはできませんさらにComboBoxを延長してください。

唯一の公的なものはdropdownFactoryです。理論的には、作成されたドロップダウンリストを登録するか、拡張リストを作成するためにオーバーライドすることができます。しかし、私が見る問題は、ComboBoxがドロップダウンリストの親ではないということです.PopupManagerはそうです。これはディスパッチ(バブル)イベントを非常に困難にする可能性があります。

+0

本当、本当に難しい。 ComboBoxとListの2つのコンポーネントがあるとしたらどうでしょうか?コンボのdropdownWidthを0に設定します。リストの下に配置します。そして、ユーザーが何とかコンボを開こうとすると、(dropDownの代わりに)Listコントロールを表示します。私は疑問を持っています。それは汚い解決策ですか? AutoCompleteコンポーネントの1つでこのようなことがわかりました。 – Antenka

+0

IMHO、必要なものすべて(сблэкджекомишлюхами)で独自の 'ComboBox'を書く方が簡単です。これは部分的にオリジナルからコピーされています。私はすでにフィルタとツリーをドロップダウンとして編集可能なものを書いています。希望の動作を達成するために、元の 'ComboBox'をどのようにパッチしてハックするのか想像できません。 – moropus

+0

Heh、true ..説明のおかげで(доходчиво:Р)。私のコンボマスターピースを書くためにカスタマイズを避けることで失敗しました:) – Antenka

1

私は、あなたがドロップダウンリストを作成し、mx:ComboBoxソース、関数の中で見ることができるように、次の文書が

ItemClick event in flex List

+0

ありがとう、ドキュメントは本当に役に立ちますが、私はComboBoxでこのイベントが必要です:) – Antenka

+0

Uhm .. ItemClickとListについての考え方はComboBoxのドロップダウンをListに置き換えています、または壮大な失敗? :) – Antenka

+1

'ComboBox'のドロップダウンは既に' List'です: 'private var _dropdownFactory:IFactory = new ClassFactory(List);' – moropus

0

この解決策が見つかりました。 itemClickオプションのないスパークのドロップダウンリストが必要です(ボタン上で選択したアイテムラベルを表示しないでください)

[Event(name="itemClick", type="mx.events.ItemClickEvent")] 

public class ItemClickDropDownList extends DropDownList 
{ 

    public function ItemClickDropDownList() 
    { 
     super(); 
    } 

    override public function closeDropDown(commit:Boolean):void 
    { 
     super.closeDropDown(commit); 

     var e:ItemClickEvent = new ItemClickEvent(ItemClickEvent.ITEM_CLICK, true); 
     e.item = this.selectedItem; 
     e.index = this.selectedIndex; 
     dispatchEvent(e); 

     //Deselect item 
     this.selectedIndex = -1; 
    } 
関連する問題