Недавно я перенес некоторые из моих проектов на блестящий новый Flex 4.6 SDK. Я не ожидал особых проблем, так как это был лишь незначительный релиз. Но на самом деле у меня были сотни ошибок повсюду. Эти ошибки в основном исходят от Spark SkinnableComponent
s; например:
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
отлично работает под 4.5, но выдает ошибку nullpointer
в 4.6. Причина достаточно проста: в 4.6 getCurrentSkinState ()
вызывается до создания скинов, тогда как в 4.5 я мог быть уверен, что скины в состоянии по умолчанию будут там.
Дальнейшее расследование привело меня к мысли, что начальное состояние кожи теперь undefined
вместо первого состояния в массиве States
(до тех пор, пока он не вызовет getCurrentSkinState ()
то есть).
Исправить эти проблемы, как правило, довольно просто и с моей стороны требуется лишь несколько более защитное программирование. Но это не моя настоящая проблема.
Настоящая проблема заключается в том, что если жизненный цикл компонента изменился, я хотел бы точно знать , что изменилось и какие части моих проектов могут быть затронуты.
Я был бы очень признателен, если бы кто-нибудь мог пролить свет на это или хотя бы указать мне нужное место, где я могу прочитать все об этом (потому что единственные примечания к выпуску, которые я мог найти, касались только новых мобильных компонентов).
Отредактируйте (это не меняет вопроса; я просто хотел поделиться с вами своими выводами)
Еще одна проблема, с которой я только что столкнулся: модификатор dynamic
больше не работает наследуется подклассами. Это чистая проблема ActionScript, поэтому я предполагаю, что компилятор трактует ее по-другому.
Позвольте мне объяснить. Рассмотрим этот класс:
public class MyClass extends Array { }
Теперь, если я попытаюсь вставить новый элемент в этот настраиваемый массив следующим образом:
var t:Array = new MyClass();
t.push("hello");
Очевидно, это потому, что Array является динамическим, а MyClass - нет, поэтому это легко исправить:
public dynamic class MyClass extends Array { }
и ошибка исчезла.
Но что, если я использовал стороннюю библиотеку с таким кодом, к которой у меня нет доступа к исходному коду? Мое приложение ломалось, и я никак не мог это исправить. Я имею в виду: да ладно, это немаловажное изменение для дот-релиза.