弹出Combobox中的ItemClick事件

时间:2011-09-01 08:46:55

标签: flex events combobox onitemclicklistener

有谁知道,有没有办法在Flex ComboBox(或类似的东西)中捕获ItemClick事件。也许有任何技巧.. :)我确实意识到,我可以自定义它,但这不适合我的情况。

感谢您的时间:)

3 个答案:

答案 0 :(得分:1)

我认为以下文件会有所帮助

ItemClick event in flex List

答案 1 :(得分:1)

正如您在mx:ComboBox来源中看到的那样,创建下拉列表的函数是私有的,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是。这可能会使调度(泡沫)事件变得非常困难。

答案 2 :(得分:0)

我找到了这个解决方案。我只想要一个带有itemClick事件和没有itemselect选项的spark下拉列表(不要在按钮上显示所选的项目标签)

[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;
    }