Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 扩展DropDownList以包含额外选项_Apache Flex_Actionscript 3_Flex4 - Fatal编程技术网

Apache flex 扩展DropDownList以包含额外选项

Apache flex 扩展DropDownList以包含额外选项,apache-flex,actionscript-3,flex4,Apache Flex,Actionscript 3,Flex4,我想扩展DropDownList控件以包含一个用于创建或编辑选项的选项。例如对于下拉列表中的项目列表,将有另一个选项显示“创建新项目…”或“编辑项目…”,这将是列表中的最后一个选项。当用户选择此选项时,selectedIndex或selectedItem将不会更改,并将采取相应的操作(例如,将显示一个弹出窗口)。这将是最终用户的一种方便方式 现在我希望它独立于上下文工作,并且类必须是可重用的。用户将仅指定optionText和optionFunction来解决此问题。该类的基本结构如下所示: p

我想扩展DropDownList控件以包含一个用于创建或编辑选项的选项。例如对于下拉列表中的项目列表,将有另一个选项显示“创建新项目…”或“编辑项目…”,这将是列表中的最后一个选项。当用户选择此选项时,selectedIndex或selectedItem将不会更改,并将采取相应的操作(例如,将显示一个弹出窗口)。这将是最终用户的一种方便方式

现在我希望它独立于上下文工作,并且类必须是可重用的。用户将仅指定optionText和optionFunction来解决此问题。该类的基本结构如下所示:

public class OptiveDropDownList extends DropDownList
{
    private var _enableOption:Boolean;
    private var _optionText:String;
    private var _originalDataProvider:IList;
    [Bindable] public var optionFunction:Function;

    public function OptiveDropDownList()
    {
        super();
    }

    public function set optionText(value:String):void
    {
        _optionText = value;
        dataProvider = _originalDataProvider;
    }

    public function set enableOption(value:Boolean):void
    {
        _enableOption = value;
        dataProvider = _originalDataProvider;
    }

    public override function set dataProvider(value:IList):void
    {
        _originalDataProvider = value;
        var dp:IList = null;
        if(!value){
            dp=new ArrayCollection(value.toArray());
            if(_enableOption){
                var opt:Object=new Object();
                opt[labelField]=_optionText;
                dp.addItem(opt);
            }
        }
        super.dataProvider = dp;
    }

    [Bindable]
    public override function get dataProvider():IList
    {
        return _originalDataProvider;
    }
}
我希望我的代码清楚易懂,我正在为该选项向数据提供程序添加一个额外的对象。字段名是不言自明的

现在我的问题是如何知道数据提供者的项是否已更改?我应该重写哪些函数以及如何重写。我曾尝试使用ChangeWatcher来监视dataprovider的length属性,但如果只有dataprovider中的一个对象发生了更改,它就不起作用了。我需要捕获这些更改并更新视图

我还需要捕获selection和calloptionfunction,防止默认操作不给出索引越界错误


提前谢谢

只需将事件侦听器添加到原始数据提供程序。当列表更改时(例如添加、删除或列表中的现有对象已更改),所有
IList
的实现都应分派
CollectionEvent.COLLECTION\u CHANGE
。在事件处理程序中,可以相应地更新DropDownList的数据提供程序

通过覆盖
mx_internal
方法
setSelectedIndex()
您可以根据自己的意愿调整选择。请看一看博客文章“”以获得一些灵感