Flex: неопределенный ProgressBar в модальном всплывающем окне? - PullRequest
1 голос
/ 22 апреля 2009

Всякий раз, когда я устанавливаю неопределенный индикатор выполнения в модальном всплывающем окне через PopUpManager, прогресс не отображается. Если я регулярно добавляю один и тот же ProgressBar к родителю или делаю всплывающее окно немодальным, это работает. Есть ли причина, по которой это не работает в модальных всплывающих окнах? и способ заставить его работать?

Спасибо.

Ответы [ 4 ]

1 голос
/ 23 апреля 2009

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

оригинал:

private function showLoading(e:Event = null):void
            {
                if(_progBar == null)
                {
                    _progBar = new ProgressBar();
                    _progBar.width = 200;
                    _progBar.indeterminate = true;
                    _progBar.labelPlacement = 'center';
                    _progBar.setStyle("removedEffect", fade);
                    _progBar.setStyle("addedEffect", fade);
                    _progBar.setStyle("color", 0xFFFFFF);
                    _progBar.setStyle("borderColor", 0x000000);
                    _progBar.setStyle("barColor", 0xf4b60f);
                    _progBar.label = "";
                }
                PopUpManager.addPopUp(_progBar,this,true);
                PopUpManager.centerPopUp(_progBar);
            }

Обойти:

private function showLoading(e:Event = null):void
            {
                if(_progBar == null)
                {
                    _progBar = new ProgressBar();
                    _progBar.width = 200;
                    _progBar.indeterminate = true;
                    _progBar.labelPlacement = 'center';
                    _progBar.setStyle("removedEffect", fade);
                    _progBar.setStyle("addedEffect", fade);
                    _progBar.setStyle("color", 0xFFFFFF);
                    _progBar.setStyle("borderColor", 0x000000);
                    _progBar.setStyle("barColor", 0xf4b60f);
                    _progBar.label = "";
                    _progBar.mode = ProgressBarMode.MANUAL;
                }
                PopUpManager.addPopUp(_progBar,this,true);
                PopUpManager.centerPopUp(_progBar);
                 _progBar.setProgress(0, 0);
            }
0 голосов
/ 17 сентября 2010

Это сработало для меня, как только я поместил ProgressBar в TitleWindow. Например, это не сработало:

var waitingpopup:ProgressBar = new ProgressBar();
waitingpopup.indeterminate = true;
waitingpopup.label = "Please wait, loading...";    
PopUpManager.addPopUp(waitingpopup, this, true);

И это сработало

var waitingpopup:TitleWindow = new TitleWindow();
waitingpopup.title = "Please Wait";
var pb:ProgressBar = new ProgressBar();
pb.indeterminate = true;
pb.label = "Loading...";
waitingpopup.addChild(pb);    
PopUpManager.addPopUp(waitingpopup, this, true);
0 голосов
/ 25 февраля 2010

У меня была такая же проблема, но ни одно из других решений не помогло. Ниже приведен код, который создает проблему для меня:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
    <mx:Script><![CDATA[
        import mx.controls.ProgressBar;
        import mx.managers.PopUpManager;
        private function applicationComplete():void
        {
            var progressBar:ProgressBar = new ProgressBar()
            progressBar.indeterminate = true;
            PopUpManager.addPopUp(progressBar, this, true);
            //this.addChild(progressBar);           including this line overrides the popup
            //progressBar.setProgress(0, 0);        including this line makes no difference
        }
    ]]></mx:Script>
    <mx:Label text="hello"/>
</mx:Application>

Две закомментированные строки - это то, что я понял как другие предложенные решения. Мне удалось исправить это с помощью неудобного обходного пути ниже:

Шаг 1. Создание пользовательского компонента mxml, сохраненного как Progress.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:ProgressBar indeterminate="true" />
</mx:TitleWindow>

Шаг 2. Использование пользовательского компонента в коде

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete();">
    <mx:Script><![CDATA[
        import mx.controls.ProgressBar;
        import mx.managers.PopUpManager;
        import Progress;
        private function applicationComplete():void
        {
            var progress:Progress =  new Progress();
            PopUpManager.addPopUp(progress, this, true);
            PopUpManager.centerPopUp(progress);
        }
    ]]></mx:Script>
    <mx:Label text="hello"/>
</mx:Application>

Кажется, что важно поместить ProgressBar в окно TitleWindow.

0 голосов
/ 28 января 2010

Мы можем сделать это с помощью container.addChild (Pg), например .Canvas, а затем использовать PopUpManager.

...