Niedawno zmigrowałem niektóre z moich projektów do nowego, błyszczącego pakietu SDK Flex 4.6. Nie spodziewałem się większych kłopotów, ponieważ było to tylko niewielkie wydanie. Ale w rzeczywistości mam setki błędów w każdym miejscu. Błędy te najczęściej pochodzą od Sparka SkinnableComponent
s; na przykład:Zmiany cyklu życia Sparka między wersjami 4.5 i 4.6
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
będzie działać dobrze pod 4,5, ale rzucał mi błąd nullpointer
w pkt 4.6. Powód jest prosty: w 4,6 getCurrentSkinState()
jest wywoływany przed tworzeniem części skórnych, podczas gdy w 4,5 mogę być pewny, że partie skóry w stanie domyślnym będą tam obecne.
Dalsze badania doprowadziły mnie do przekonania, że początkowy stan skóra jest teraz undefined
zamiast pierwszego stanu w tablicy States
(aż wywołuje getCurrentSkinState()
to jest).
Naprawianie tych problemów jest zwykle dość łatwe i wymaga nieco bardziej defensywnego programowania z mojej strony. Ale to nie jest mój prawdziwy problem.
Prawdziwym problemem jest, że jeśli składnik cyklu zmieniła, chciałbym wiedzieć dokładnie co się zmieniło i jakie części moich projektów może być ograniczona.
Byłbym bardzo wdzięczny, gdyby ktoś mógł rzucić trochę światła na to lub przynajmniej wskazać mi właściwe miejsce, w którym mogę przeczytać wszystko na ten temat (ponieważ jedyne informacje o wydaniu, które mogłem znaleźć, obejmowały tylko nowe komponenty mobilne) .
Edit (nie zmienia to pytanie, a ja po prostu chciałem podzielić się z wami moimi odkryciami)
Kolejny problem, po prostu wpadł: modyfikator dynamic
wydaje się nie być dziedziczone przez podklasy. Jest to czysty problem z kodem ActionScript, więc domyślam się, że to kompilator traktuje go inaczej.
Pozwól mi wyjaśnić. Rozważmy taką klasę:
public class MyClass extends Array { }
Teraz, gdy próbuję pchania nowy element do tej niestandardowej Array jak to:
var t:Array = new MyClass();
t.push("hello");
- SDK 4.5.1: bez problemu
- SDK 4.6: "Nie można utworzyć właściwości 0 w MyClass" w środowisku wykonawczym
Wygląda na to, że macierz jest dynamiczna, a MyClass nie jest, więc jest łatwo naprawiono:
public dynamic class MyClass extends Array { }
i błąd zniknął.
Ale co, jeśli użyłem biblioteki innej firmy, która ma taki kod i do której nie miałem dostępu do kodu źródłowego? Moja aplikacja się zepsułaby i nie da się tego naprawić. Mam na myśli: chodź, to nie jest drobna zmiana w wydaniu kropki.
Rozwinąłem to również, zakładam, że to błąd. Jak widzę, jeśli próbujesz uzyskać dostęp do części karnacji przed inicjalizacją komponentu. Moim "rozwiązaniem" jest uzyskanie dostępu do partii w następnej klatce za pomocą callLater() – sydd
@sydd Nie sądzę, że to błąd. Jest to konsekwentna zmiana w strukturze i chcę wiedzieć więcej na jej temat. Jeśli chcesz się dowiedzieć, kiedy część skóry jest dostępna, wystarczy zastąpić 'partAdded()'. Korzystanie z funkcji callLater() nie jest całkiem ładne. – RIAstar
@RIAstar Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? Mam kilka istotnych problemów z aktualizacją do 4.6 z 4.5 (jak [szczegółowe tutaj] (http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5)) i to absolutnie sprawiłoby, że mój dzień, gdybyś miał wgląd. – NoobsArePeople2