Flex:特殊包装列表或菜单中的项目?

时间:2009-08-04 20:25:24

标签: flex actionscript-3 flex3

我发现在特殊情况下,下拉菜单中的第一项(即菜单实例)通常很有用。例如,如果我想从Web服务提供的列表中选择一种颜色:

<mx:PopUpMenuButton id="colorSelelector"
    dataProvider="{colorsService.lastResult}" />

我可能还想要一个特殊情况,即“输入一种新颜色”,允许用户输入不在列表中的新颜色的RGB值。例如:

var newColor = { label: "Enter a new color", rgb: null };

然后用于:

<mx:PopUpMenuButton id="colorSelelector"
    dataProvider="{colorsService.lastResult}"
    lastOption="{newColor}" />

所以,除了更改我从服务中回来的列表之外,还有更好的方法吗?

(只是一个先发制人的评论:这是一个简化......我实际上并没有尝试制作一个颜色选择列表)

2 个答案:

答案 0 :(得分:1)

绑定到dataProvider时,调用一个添加特殊情况的函数。例如:

<mx:PopUpMenuButton id="colorSelector" 
    dataProvider="{addSpecialCases(colorsService.lastResult)}"/>

答案 1 :(得分:1)

  

所以,除了改变我得到的清单   从服务回来,有没有   更好的方法吗?

这种方法将是最干净的,没有扩展HTTPService,这将很好地工作(但实际上只是改变你的结果;)):

package
{
    import mx.rpc.http.HTTPService;

    public class MyHTTPService extends HTTPService
    {
        public var appendToResult:Object;

        public function MyHTTPService(rootURL:String=null, destination:String=null)
        {
            super(rootURL, destination);
        }

        [Bindable("resultForBinding")]
        override public function get lastResult():Object
        {
            //I know what my type is, Array as an example
            var myResult:Array = operation.lastResult;
            myResult.push( this.appendToResult )
            return myResult;
        }
    }
}