2011-08-04 17 views
13

मैं सेन्चा टच और फोनगैप में लिखे गए एक जटिल वेब एप्लिकेशन पर काम कर रहा हूं। जिस तरह से सेन्चा टच अनुप्रयोग लिखे गए हैं, वे प्रयास/पकड़ के साथ हर संभावित विफलता बिंदु को घेरना मुश्किल बनाते हैं, खासकर एसिंक्रोनस AJAX अनुरोध हैंडलर के साथ।विंडो। आतंक मोबाइल में काम नहीं करता है - मुझे अनचाहे अपवादों से कैसे निपटना चाहिए?

यह पता लगाने के लिए भी महत्वपूर्ण है कि एक अनचाहे अपवाद तब होता है क्योंकि यह फ़ोनगैप के साथ एक देशी ऐप की तरह दिखता है और महसूस करता है (यानी हम उन्हें पृष्ठ को रीफ्रेश करने की उम्मीद नहीं कर सकते हैं और फिर एक वेब ऐप में पुनः प्रयास करने की कोशिश नहीं कर सकते हैं नियमित ब्राउज़र)।

क्या आप इस परिदृश्य से निपटने के लिए सिफारिश कर सकते हैं?

उत्तर

1

यह एक अच्छा सवाल है। बेशक विंडो error घटना को कभी भी रणनीतिक रूप से try/catch ब्लॉक या HTTP अनुरोधों से त्रुटि प्रतिक्रियाओं का अच्छा उपयोग नहीं करना चाहिए, लेकिन मोबाइल ब्राउज़र डेस्कटॉप संस्करणों के साथ पकड़ने तक, वास्तव में अप्रत्याशित त्रुटियों की रिपोर्ट करना असंभव है।

मेरे पास इसका परीक्षण करने का समय नहीं है; इतना सब मैं सुझाव दे सकते हैं क्या सब ईमानदारी शायद एक बुरा विचार में है के लिए इस समय एक सोचा प्रयोग ...

आप संभावित addEventListener (और शायद dispatchMethod) के प्रतिस्थापन के कार्यों लिख सकता है कि देशी कार्यों लपेट कर सकता है/try/catch के साथ हैंडलर तर्क और एक कस्टम वैश्विक त्रुटि लॉगर कॉल करें। चूंकि इन कार्यों को एक साथ 'हुक' करने का कोई आसान तरीका नहीं है, इसलिए इसमें कोई संदेह नहीं होगा कि 'रैपिंग' करने के लिए window पर कई देशी ऑब्जेक्ट्स प्रोटोटाइपों को फिर से शुरू किया जाए। इसमें अपवादों का एक बड़ा बहुमत शामिल हो सकता है जो वर्तमान में चुप हो जाएंगे।

+0

मुझे नहीं लगता कि यह एक अच्छा समाधान है। मैं अपने कोड को स्वचालित रूप से प्रयास/पकड़ ब्लॉक में सभी ईवेंट हैंडलर (सेन्चा टच फ्रेमवर्क इवेंट हैंडलर सहित) को लपेटने के लिए कोड डालने से मैन्युअल रूप से कोशिश/पकड़ ब्लॉक में अपना कोड लपेटूंगा। ऐसा लगता है कि यह प्रदर्शन और बैटरी जीवन में महंगा होगा, और अभी भी मुझे पूर्ण कवरेज नहीं दे रहा है। –

0

मुझे नहीं लगता कि इसे सभी प्रासंगिक हैंडलरों को सुरक्षित रूप से लपेटने के लिए महंगा होना चाहिए। सबसे अधिक संभावना है कि आप (या सेन्चा टच) पहले से ही सबसे अधिक क्रॉस-प्लेटफ़ॉर्म तरीके से अपने ईवेंट हैंडलर स्थापित करने के लिए jQuery जैसी किसी चीज़ पर भरोसा कर रहे हैं। तो सब कुछ एक छोटी संख्या में कार्यों द्वारा स्थापित किया जा रहा है, इसलिए केवल कुछ जगहें हैं जिन्हें पैचिंग की आवश्यकता है।

दूसरे शब्दों में, निम्नतम स्तर (प्रत्येक नोड के एडवेन्ट लिस्टनर) पर पैचिंग करने का प्रयास न करें। कुछ पुस्तकालय कार्यों को पैच (या लिखें) और फिर हमेशा अपने ईवेंट श्रोताओं को स्थापित करने के लिए उनका उपयोग करें।

यदि आप पहले अपना त्रुटि फँसाने वाला कोड लोड करते हैं (किसी और के पास प्रासंगिक कार्यों के संदर्भों को पकड़ने का मौका है), और पैच jQuery.bind और window.setTimeout आपको बहुत अच्छा कवरेज मिलेगा। अजाक्स के लिए, पहले से ही अच्छे हुक (जैसे jQuery.ajaxPrefilter) हैं जहां आप क्लोजर में प्रतिक्रिया हैंडलर लपेटकर अपना अपवाद जाल डाल सकते हैं।