AIR: компонент работает неправильно после переключения окна - PullRequest
1 голос
/ 22 февраля 2010

Хорошо, поэтому у меня есть компонент, который имеет функцию для удаления себя как popUp в его текущем Window и добавления себя во вновь созданный Window.

Это работает, однако, если у компонента есть дочерний элемент, такой как ComboBox, раскрывающийся список по-прежнему всплывает в старом окне, где он был, также полосы прокрутки, и фокус в новом окне, похоже, работает неправильно .

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

Вот мой код:

private var ownWindow:Window;
private var _inOwnWindow:Boolean;
private var _removedEffect:Move;
private var _openX:Number;
private var _openY:Number;

public function launchInNewWindow(e:Event):void
{
    _openX = Application.application.nativeWindow.x + this.x + 5; //keep in same spot add 5 for systemChrom border
    _openY = Application.application.nativeWindow.y + this.y + 30;//keep in same spot add 30 for systemChrom title

    this.parent.removeChild(this);
    ownWindow = new Window();
    ownWindow.systemChrome = 'none';
    ownWindow.type = NativeWindowType.LIGHTWEIGHT;
    ownWindow.transparent = true;
    ownWindow.setStyle('showFlexChrome', false);
    ownWindow.width = this.width > 750 ? 750 : this.width;
    ownWindow.height = this.height > 550 ? 550 : this.height;
    edit.enabled = false;

    _removedEffect = this.getStyle('removedEffect') as Move;
    if(_removedEffect == null)
    {
        openNewWindow();
    }
    else
    {
    // Wait for removed effect to play before adding to new window
_removedEffect.addEventListener(EffectEvent.EFFECT_END,delayOpenInNewWindow);
    }
}

private function delayOpenInNewWindow(e:Event = null):void
{
    var t:Timer = new Timer(100,1);
    t.addEventListener(TimerEvent.TIMER,openNewWindow);
    t.start();
}

private function openNewWindow(e:Event = null):void
{
    ownWindow.addChild(this);
    ownWindow.width += 5; //add to show dropshadow
    ownWindow.height += 10; //add to show dropshadow
    ownWindow.open();
    _inOwnWindow = true;
    ownWindow.nativeWindow.x = _openX;
    ownWindow.nativeWindow.y = _openY;
}

Есть идеи?

Спасибо !!

1 Ответ

1 голос
/ 23 февраля 2010

Прежде чем я попробую, вы пробовали callLater в строке openNewWindow ()?

[Хромая попытка исправления, я знаю - но, учитывая, что, кажется, нет события, которое вы можете прослушать в случае, когда removeEffect не равно нулю, и похоже, что таймер - это ваша единственная возможность там Я думаю все нормально дать неудачные попытки исправить :-)]

...