2011-12-14 27 views
9

के बीच स्पार्क जीवन चक्र परिवर्तन मैंने हाल ही में अपनी कुछ परियोजनाओं को चमकीले नए फ्लेक्स 4.6 एसडीके में माइग्रेट कर दिया है। मुझे बहुत परेशानी की उम्मीद नहीं थी क्योंकि यह केवल मामूली रिलीज थी। लेकिन वास्तव में मुझे जगह पर सैकड़ों त्रुटियां मिलीं। ये त्रुटियां ज्यादातर स्पार्क SkinnableComponent एस से आती हैं; उदाहरण के लिए:फ्लेक्स 4.5 और 4.6

override protected function getCurrentSkinState():String { 
    return mySkinPart.someProperty ? "normal" : "someOtherState"; 
} 

4,5 के तहत ठीक काम करेगा, लेकिन मुझे 4.6 में एक nullpointer त्रुटि फेंक होगा। कारण काफी सरल है: 4.6 getCurrentSkinState() में त्वचापटल बनाने से पहले कहा जाता है, जबकि 4.5 में मैं निश्चित हो सकता हूं कि डिफ़ॉल्ट स्थिति में त्वचापटल वहां होंगे।

आगे की जांच ने मुझे विश्वास दिलाया कि States सरणी में पहले राज्य के बजाय त्वचा की शुरुआती स्थिति अब undefined है (जब तक यह getCurrentSkinState() नहीं है)।

इन समस्याओं को ठीक करना आमतौर पर बहुत आसान है और मेरे हिस्से से कुछ और अधिक रक्षात्मक प्रोग्रामिंग की आवश्यकता है। लेकिन यह मेरा असली मुद्दा नहीं है।

असली मुद्दा कि अगर घटक जीवन चक्र बदल गया है, मैं वास्तव में को पता है कि बदल गया है और अपनी परियोजनाओं का क्या भागों प्रभावित हो सकता है चाहते हैं।

यदि कोई इस पर कुछ प्रकाश डाल सकता है या कम से कम मुझे सही जगह पर इंगित करता है तो मैं बहुत सराहना करता हूं जहां मैं इसके बारे में सब कुछ पढ़ सकता हूं (क्योंकि केवल रिलीज नोट्स जो मुझे मिल सकता था केवल नए मोबाइल घटकों को कवर कर रहा था) ।


संपादित (इस सवाल का परिवर्तन नहीं होता है, मैं बस आप के साथ अपने निष्कर्षों को साझा करना चाहते थे)

एक और मुद्दा मैं बस में भाग: dynamic संशोधक अब से विरासत में मिला है किया जा रहा है उपवर्गों। यह एक शुद्ध एक्शनस्क्रिप्ट मुद्दा है, इसलिए मुझे लगता है कि यह संकलक है जो इसे अलग-अलग व्यवहार करता है।

मुझे समझाएं।

public class MyClass extends Array { } 

अब, अगर मैं इस तरह इस कस्टम सरणी में एक नया आइटम पुश करने के लिए प्रयास करें:: इस वर्ग पर विचार करें

var t:Array = new MyClass(); 
t.push("hello"); 
  • एसडीके 4.5.1: कोई समस्या नहीं
  • एसडीके 4.6: "रनटाइम

पर स्पष्ट रूप से ऐसा इसलिए है क्योंकि ऐरे गतिशील है और MyClass नहीं है, इसलिए यह आसानी से है निश्चित:

public dynamic class MyClass extends Array { } 

और त्रुटि समाप्त हो गई है।

लेकिन अगर मैंने तीसरे पक्ष की लाइब्रेरी का उपयोग किया है जिसमें इस तरह का कोड है और जिसके लिए मेरे पास कोई स्रोत कोड पहुंच नहीं है? मेरा आवेदन टूट जाएगा और कोई रास्ता नहीं है कि मैं इसे ठीक कर सकता हूं। मेरा मतलब है: चलो, यह एक डॉट रिलीज के लिए कोई मामूली परिवर्तन नहीं है।

+0

मैंने इसे भी पारित किया है, मैं इसे एक बग मानता हूं। जैसा कि मैंने देखा है, यदि आप घटक को निष्क्रिय करने से पहले त्वचा के हिस्सों तक पहुंचने का प्रयास करते हैं। मेरा "समाधान" कॉललाटर() – sydd

+0

@sydd का उपयोग करके अगले फ्रेम में skinparts तक पहुंचने के लिए है, मुझे नहीं लगता कि यह एक बग है। यह ढांचे में एक सतत बदलाव है और मैं इसके बारे में और जानना चाहता हूं। यदि आप जानना चाहते हैं कि एक त्वचापक्षक कब उपलब्ध है, तो बस 'partAdded() 'ओवरराइड करें। कॉललाटर() का उपयोग करना बिल्कुल सुंदर नहीं है। – RIAstar

+0

@RIAstar क्या आपको कभी इसका समाधान मिला? मुझे 4.5 से 4.6 तक अपडेट करने में कुछ महत्वपूर्ण समस्याएं हैं (जैसा कि यहां विस्तृत किया गया है (http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5)) और यदि आप कुछ अंतर्दृष्टि रखते हैं तो यह पूरी तरह से मेरा दिन बना देगा। – NoobsArePeople2

उत्तर

2

मुझे लगता है कि वहां दो प्रश्न हैं।

1) असली मुद्दा यह है कि अगर घटक जीवन चक्र बदल गया है, मैं पता करने के लिए वास्तव में क्या बदल गया है और अपनी परियोजनाओं किस भागों प्रभावित हो सकता है चाहते हैं।

मैंने दो संस्करणों के बीच मतभेदों का एक व्यापक निम्न-स्तर विश्लेषण नहीं देखा है। यदि आप वास्तव में चिंतित हैं, और आपके पास समय बिताने का समय है, तो आप दो एसडीके के स्रोत कोड की तुलना करने के लिए एक diff टूल का उपयोग कर सकते हैं। बहुत अधिक संरचनात्मक परिवर्तन नहीं होना चाहिए - उदा। कक्षाओं या पैकेजों का नाम बदल दिया, इसलिए यह इतना बुरा नहीं हो सकता है। मुझे उम्मीद है कि बहुत से वर्ग नहीं बदले होंगे।

2) एक और मुद्दा जो मैंने अभी भाग लिया: गतिशील संशोधक अब उप-वर्गों द्वारा विरासत में नहीं लगता है। यह एक शुद्ध एक्शनस्क्रिप्ट मुद्दा है, इसलिए मैं अनुमान लगाता हूं कि यह संकलक है जो इसे अलग-अलग व्यवहार करता है।

यह एक आसान है। dynamic विरासत में कभी नहीं मिला है। Object गतिशील है, इसलिए अगर विशेषता विरासत में मिली तो प्रत्येक वर्ग को भी गतिशील होना होगा।

यदि गतिशील वर्ग के उदाहरणों से संबंधित व्यवहार में कोई परिवर्तन होता है, तो आपके कोड में कुछ और चल रहा है।

+0

1) जैसा कि मैंने इसे देखा: यह मेरा कोड तोड़ता है, इसलिए यह एक बड़ा बदलाव है। घटक प्रारंभिकरण पर एक अलग क्रम में चीजों को स्पष्ट रूप से निष्पादित किया जा रहा है। Diff उपकरण एक अच्छी टिप है, लेकिन एक चेंजलॉग जिसे मैं अभी पढ़ सकता हूं वह पूरी तरह से अच्छा होगा। मैंने अभी पाया [फ्लेक्स 4.5 के लिए एक] (http://opensource.adobe.com/wiki/display/flexsdk/Flex+4.5+ बैकवर्ड्स + कॉम्पैबिलिटी), लेकिन 4.6 – RIAstar

+0

2 के लिए कुछ भी नहीं है) 'इसमें कुछ और नहीं चल रहा है मेरा कोड ': मेरा कोड बिल्कुल ठीक है जैसा मैंने इसे अपने प्रश्न में लिखा है (केवल एक वर्ग जो अतिरिक्त कार्यक्षमता वाले ऐरे को विस्तारित करता है)। दो संस्करणों के बीच बदल गया एकमात्र चीज कंपाइलर है। – RIAstar

+0

मैंने एनआर 2 पर कुछ और परीक्षण किया है और ऐसा लगता है कि यह वास्तव में एक बग था जिसे अब तय किया गया है। यह _should_ - जैसा कि आप वर्णन करते हैं - मैंने जो किया वह करना संभव नहीं था। फिर भी, यह था। – RIAstar