Gần đây tôi đã di chuyển một số dự án của mình sang Flex 4.6 SDK mới sáng bóng. Tôi đã không mong đợi nhiều rắc rối vì nó chỉ là một bản phát hành nhỏ. Nhưng thực tế là tôi có hàng trăm lỗi trên khắp nơi. Những lỗi này chủ yếu đến từ Spark SkinnableComponent
s; ví dụ:Thay đổi vòng đời Spark giữa Flex 4.5 và 4.6
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
sẽ hoạt động tốt dưới 4.5, nhưng sẽ ném cho tôi một lỗi nullpointer
trong 4.6. Lý do là đủ đơn giản: trong 4.6 getCurrentSkinState()
được gọi trước khi các skinparts được tạo ra, trong khi ở 4.5 tôi có thể chắc chắn rằng skinparts trong trạng thái mặc định sẽ ở đó.
Điều tra thêm dẫn tôi tin rằng trạng thái ban đầu của da bây giờ là undefined
thay vì trạng thái đầu tiên trong mảng States
(cho đến khi nó gọi là getCurrentSkinState()
).
Khắc phục các sự cố này thường khá dễ dàng và chỉ yêu cầu phần mềm phòng thủ nhiều hơn một phần từ phía tôi. Nhưng đó không phải là vấn đề thực sự của tôi.
Vấn đề thực sự là nếu chu kỳ thành phần đã thay đổi, tôi muốn biết chính xác những gì đã thay đổi và những phần nào của dự án của tôi có thể bị ảnh hưởng.
Tôi sẽ rất cảm kích nếu ai đó có thể làm sáng tỏ điều này hoặc ít nhất là đưa tôi đến đúng nơi mà tôi có thể đọc tất cả về nó (vì ghi chú phát hành duy nhất tôi có thể tìm thấy chỉ bao gồm các thành phần di động mới) .
Sửa (điều này không làm thay đổi câu hỏi, tôi chỉ muốn chia sẻ những phát của tôi với bạn)
Một vấn đề tôi chỉ chạy vào: modifier dynamic
dường như không còn được thừa hưởng bởi các lớp con. Đây là một vấn đề ActionScript thuần túy, vì vậy tôi đoán đó là trình biên dịch xử lý nó một cách khác nhau.
Hãy để tôi giải thích. Xem xét lớp này:
public class MyClass extends Array { }
Bây giờ, nếu tôi cố gắng đẩy một mục mới vào mảng này tùy chỉnh như thế này:
var t:Array = new MyClass();
t.push("hello");
- SDK 4.5.1: không có vấn đề
- SDK 4.6: "Không thể tạo thuộc tính 0 trên MyClass" tại thời gian chạy
Rõ ràng là do mảng là động và MyClass không phải là, vì vậy nó dễ dàng cố định:
public dynamic class MyClass extends Array { }
và lỗi đã biến mất.
Nhưng nếu tôi sử dụng thư viện của bên thứ ba có mã như thế này và tôi không có quyền truy cập mã nguồn thì sao? Ứng dụng của tôi sẽ bị hỏng và không có cách nào tôi có thể sửa nó. Ý tôi là: thôi nào, đó không phải là thay đổi nhỏ đối với việc giải phóng dấu chấm.
Tôi cũng đã gặp phải điều này, tôi cho rằng đó là lỗi. Như tôi thấy xảy ra, nếu bạn cố gắng truy cập các bộ phận da trước khi các thành phần là initalizes. "Giải pháp" của tôi là truy cập skinparts trong khung tiếp theo bằng cách sử dụng callLater() – sydd
@sydd Tôi không nghĩ đó là lỗi. Đó là một sự thay đổi nhất quán trong khuôn khổ và tôi muốn biết thêm về nó. Nếu bạn muốn biết khi nào một skinpart có sẵn, chỉ cần ghi đè lên 'partAdded()'. Sử dụng callLater() không chính xác là đẹp. – RIAstar
@RIAstar Bạn đã bao giờ tìm được giải pháp cho điều này chưa? Tôi đang gặp một số vấn đề quan trọng khi cập nhật lên 4.6 từ 4.5 (như [chi tiết tại đây] (http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5)) và nó sẽ hoàn toàn làm cho ngày của tôi nếu bạn có một số thông tin chi tiết. – NoobsArePeople2