Недавно я перенес некоторые из моих проектов в новый Flex 4.6 SDK. Я не ожидал больших проблем, так как это был лишь незначительный выпуск. Но на самом деле у меня были сотни ошибок повсюду. Эти ошибки будут в основном исходить от Spark SkinnableComponent
; например:Изменения жизненного цикла Spark между Flex 4.5 и 4.6
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
будет работать нормально под 4,5, но бросил бы мне ошибку nullpointer
в 4.6. Причина достаточно проста: в 4.6 getCurrentSkinState()
вызывается до создания скинов, тогда как в 4.5 я могу быть уверен, что скины в состоянии по умолчанию будут там.
Дальнейшие исследования заставили меня поверить, что начальное состояние Skin теперь undefined
вместо первого состояния в массиве States
(пока оно не называет getCurrentSkinState()
).
Устранение этих проблем обычно довольно легко и требует от меня немного более защитного программирования. Но это не моя настоящая проблема.
Реальная проблема в том, что, если жизненный цикл компонент изменился, я хотел бы точно знать, что изменилось, и какие части моих проектов могут быть затронуты.
Я был бы очень признателен, если бы кто-то мог пролить свет на это или, по крайней мере, указать мне в нужное место, где я могу все прочесть (потому что единственные заметки о выпуске, которые я смог найти, касались только новых мобильных компонентов) ,
Редактировать (это не меняет вопрос, я просто хотел поделиться своими выводами с вами)
Другим вопросом, который я только что столкнулся: модификатор dynamic
кажется, больше не передается по наследству подклассы. Это чистая проблема ActionScript, поэтому я думаю, что это компилятор, который рассматривает его по-разному.
Позвольте мне объяснить. Рассмотрим этот класс:
public class MyClass extends Array { }
Теперь, если я пытаюсь протолкнуть новый элемент в этот пользовательский массив, как это:
var t:Array = new MyClass();
t.push("hello");
- SDK 4.5.1: без проблем
- SDK 4.6: «Невозможно создать свойство 0 на MyClass» во время выполнения
По-видимому, это потому, что Array динамичен, а MyClass - нет, поэтому легко исправлено:
public dynamic class MyClass extends Array { }
Ошибка при установке.
Но что, если я использовал стороннюю библиотеку с таким кодом и к которой у меня не было доступа к исходному коду? Мое приложение сломалось, и я никак не мог это исправить. Я имею в виду: давай, это не мелочи для точечного релиза.
Я тоже это принял, я предполагаю, что это ошибка. Как я вижу, если вы пытаетесь получить доступ к частям кожи до того, как компонент инициализируется. Мое «решение» заключается в доступе к сайтам в следующем кадре с использованием callLater() – sydd
@sydd. Я не думаю, что это ошибка. Это последовательное изменение в структуре, и я хочу узнать больше об этом. Если вы хотите знать, когда доступен скинпарт, просто переопределите 'partAdded()'. Использование callLater() не совсем красиво. – RIAstar
@RIAstar Вы когда-нибудь находили решение? У меня есть некоторые существенные проблемы с обновлением до 4.6 из 4.5 (как [подробно описано здесь] (http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5)) и это было бы абсолютно сделать мой день, если бы у вас было некоторое понимание. – NoobsArePeople2