Flex: Специальный элемент в списке или меню? - PullRequest
0 голосов
/ 05 августа 2009

Я обнаружил, что это часто полезно для особого случая первого элемента в раскрывающемся меню (например, экземпляр меню). Например, если я хочу выбрать цвет из списка, предоставляемого веб-службой:

<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 ]

1 голос
/ 09 августа 2009

Итак, кроме изменения списка, я получаю назад из сервиса, есть ли лучший способ сделать это?

Этот подход будет самым чистым, без расширения 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;
        }
    }
}
1 голос
/ 05 августа 2009

Когда вы связываетесь с dataProvider, вызываете функцию, которая добавляет ваш особый случай. Например:

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