Есть ли надежный способ «обновить» компонент? - PullRequest
0 голосов
/ 24 декабря 2011

При «обновлении» я полностью удаляю его, а затем снова внедряю в приложение (без закрытия самого приложения - то есть). Кроме того, я думаю, что вопрос не требует пояснений.

Пример: Скажем, у меня есть компонент с именем myComponent. Я добавляю этот компонент в приложение, используя MXMl стандартным способом <components:myComponent id="myID" />. Скажем, что когда пользователь нажимает кнопку (кнопка может находиться в другом состоянии), компонент с идентификатором myID должен быть собранным мусором , и новый экземпляр его добавляется в приложение.

Как мне это сделать? Если есть несколько решений, какое из них оптимально с точки зрения производительности?

Я новичок во Flash и Flex, поэтому извините, если использовалась неправильная терминология.

1 Ответ

0 голосов
/ 24 декабря 2011

Удалить все прослушиватели событий из старого компонента;независимо от того, что они используют, метод removeEventListener:

myButton.removeEventListener(someEvent, someEventHandlerMethod);

Тогда все переменные, которые ссылаются на компонент, должны быть равны нулю.Если он создан в файле MXML, например, так:

<s:Button id="myButton" />

Тогда все, что вам нужно сделать, это установить для этого значения значение null:

myButton = null;

Как только ссылки на компонент отсутствуютон может безопасно получить право на сбор мусора.

Если вы хотите пересоздать, то просто пересоздайте его.Вам придется заново создать его в ActionScript, но код не сложный.Концептуально что-то вроде этого:

myButton = new myButton();
myButton.properties = propertyValues;
myButton.addEventListener(someEvent, someEventHandlerMethod);
parentContainer.addChildAt(myButton, whateverPositionYouWantToADdTheComponentAt);

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

...