2012-12-19 7 views
7

लिए प्रतीक्षा कर रहा मैं वर्तमान में स्वयं शिक्षा प्रयोजनों के लिए मुख्य रूप से एक एप्लिकेशन को विकसित कर रहा हूँ और जब से मैं अभी भी पूरी तरह से जे एस के लिए नहीं इस्तेमाल किया कर रहा हूँ मैं मेरी समस्या के लिए कुछ मदद इस्तेमाल कर सकते हैं:कई घटनाक्रम

मेरे ऐप मैं में एक जावास्क्रिप्ट लाइब्रेरी (jqMobi) का उपयोग करना जिसका उपयोग डीओएम मैनिपुलेशन, पेज ट्रांज़िशन, अजाक्स कॉल इत्यादि के लिए किया जाता है और मैं भौगोलिक स्थान जैसे डिवाइस सुविधाओं तक पहुंचने के लिए फोनगैप का भी उपयोग कर रहा हूं।

जब मैं अपना ऐप शुरू करता हूं, तो मैं डिवाइस का भौगोलिक स्थान प्राप्त करना चाहता हूं, मेरे सर्वर (डिवाइस के भौगोलिक स्थान सहित) को AJAX (jsonp) अनुरोध भेजना जो जेसन ऑब्जेक्ट्स की एक सरणी देता है जिसका मैं उपयोग करूंगा एक सूची का निर्माण करें।

मुझे भौगोलिक स्थान प्राप्त करने से पहले मुझे फोनगैप लोड करने की प्रतीक्षा करनी होगी। और AJAX कॉल करने और प्रतिक्रिया को संभालने के लिए jqMobi का उपयोग करने से पहले मुझे इसे लोड करने के लिए प्रतीक्षा करने की आवश्यकता है।

तो मैं मूल रूप से घटनाओं के लिए है

document.addEventListener("DOMContentLoaded",execute_this,false); //jqMobi is now ready 
document.addEventListener("deviceready", execure_sth, false); //Phonegap is now ready 

को सुन im मैं कैसे जैसे ही इन घटनाओं में से दोनों सक्रिय नहीं हो एक समारोह निष्पादित और पहले क्यों नहीं करते?

अगर मैं jQuery का उपयोग करता हूं तो मैं इसके $ का उपयोग करूँगा। अलग ऑब्जेक्ट्स और इसके जब ... फिर फ़ंक्शन लेकिन जब तक मुझे इन तक पहुंच नहीं है, तो मैं एक विकल्प ढूंढ रहा हूं।

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

1

इस प्रयास करें,

document.addEventListener("DOMContentLoaded",execute_this,false); 
function execute_this(){ 
document.addEventListener("deviceready", execure_sth, false); 
} 
function execute_sth(){ 
//your code here 
} 
+1

आपकी मदद के लिए धन्यवाद। हालांकि एक प्रश्न: क्या होता है यदि उदाहरण के लिए डिवाइस से पहले ईवेंट DOMContentLoaded से पहले होता है? क्या यह अभी भी execute_sth को कॉल करेगा? – marius2k12

+0

फोनगैप साइट के अनुसार देखें http://docs.phonegap.com/en/1.0.0/phonegap_events_events.md.html "आमतौर पर, आप दस्तावेज़ दस्तावेज़ के साथ एक ईवेंट श्रोता संलग्न करना चाहेंगे। HTML दस्तावेज़ के DOM के बाद एक बार लदा हुआ।" – ppsreejith

18

पहले लाल पर, कुछ इस तरह निश्चित रूप से काम करेगा:

var executed_this = false, executed_sth = false; 

function execute_this() { 
    executed_this = true; 
    combined_execution(); 
} 

function execute_sth() { 
    executed_sth = true; 
    combined_execution(); 
} 

function combined_execution() { 
    if (executed_this && executed_sth) { 
    // magic! 
    } 
} 

लेकिन नहीं एक्स्टेंसिबल है (अगर आप चाहते हैं क्या पर प्रतीक्षा करने के लिए एक तिहाई घटना?)। एक काउंटर काम करेगा:

var wait_on = 2; 

function execute_this() { 
    combined_execution(); 
} 

function execute_sth() { 
    combined_execution(); 
} 

function combined_execution() { 
    wait_on--; 
    if (wait_on === 0) { 
    // magic! 
    } 
} 

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

+0

एक लाइनर !! wooo! 'if (--waitOn! == 0) झूठी वापसी करें :) :) –

+0

यह मेरे परिदृश्य में मेरे लिए काम करता है मेरे पास 2 AJAX कॉल हैं जो समानांतर में किए जाते हैं और मैं दोनों काम करने के बाद केवल एक समारोह चलाने के लिए चाहता हूं। और मैं श्रृंखला में उन्हें चलाकर उन्हें धीमा नहीं करना चाहता हूं –