Flex: removeEffect вызывает ошибку при смене родителя - PullRequest
1 голос
/ 16 февраля 2010

хорошо, у меня есть подкласс TitleWindow с этим методом:

public function launchInNewWindow(e:Event):void
{
    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;
    ownWindow.addChild(this);
    ownWindow.width += 5; //add to show dropshadow
    ownWindow.height += 10; //add to show dropshadow
    ownWindow.open();
    _inOwnWindow = true;
    ownWindow.nativeWindow.x = Application.application.nativeWindow.x + this.x + 5; //keep in same spot add 5 for systemChrom border
    ownWindow.nativeWindow.y = Application.application.nativeWindow.y + this.y + 30;//keep in same spot add 30 for systemChrom title
}

Что делает это, так это делает окно заголовка своим собственным Window (NativeWindow), создав новый объект Window и добавив себя в displayList нового окна.

Это работает очень хорошо, однако, если у меня установлен removedEffect для экземпляра этого класса, он выдает ошибку при попытке добавить себя в displayList окна.

Я попытался добавить:

this.setStyle('removedEffect',null);

и

this.setStyle('removedEffect',new TitleWindow().getStyle('removedEffect'));

к методу как попытка удалить любой удаленный эффект, установленный на себе перед рукой, но безуспешно.

но работает нормально, если на компоненте нет элемента removeEffect. Должен быть способ исправить это.

Есть идеи?

Спасибо !!

1 Ответ

0 голосов
/ 17 февраля 2010

Чтобы removedEffect работал, окно должно быть на исходном родителе, но вы немедленно пытаетесь добавить его к новому родителю, и оно не может принадлежать двум родителям одновременно. Есть несколько вариантов, которые я могу придумать.

  1. Получите растровое изображение удаляемого окна, покажите, что в том же месте запустите нужный эффект для этой растровой копии, а затем вы можете запустить переопределение оригинала без вмешательства эффекта. 1006 *

  2. Разделите код, который удаляет и повторно родительский на два шага. Сначала удалите окно. Затем, когда removedEffect будет сделано, добавьте его в список отображения нового окна.

...