Изменения жизненного цикла Spark между Flex 4.5 и 4.6

Недавно я перенес некоторые из моих проектов на блестящий новый 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");
  • SDK 4.5.1: нет проблем
  • SDK 4.6: «Невозможно создать свойство 0 в MyClass» во время выполнения

Очевидно, это потому, что Array является динамическим, а MyClass - нет, поэтому это легко исправить:

public dynamic class MyClass extends Array { }

и ошибка исчезла.

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

9
задан zero323 30 September 2015 в 02:49
поделиться