2012-03-09 13 views
7

मुझे कुछ हद तक गतिशील Google मानचित्र डिस्प्ले को एक साथ टुकड़े करने की कोशिश करने के साथ कुछ अजीब समस्या है। मेरे पास एक मानचित्र पर ओवरले हैं जो क्लिक करते समय मैं एक फ़ंक्शन कॉल करना चाहता हूं। शुरू में मैं सब कुछ कठिन कोडित थी, इसलिए मैं इस तरह प्रत्येक ओवरले के लिए एक समारोह था:मैं बिना किसी फ़ंक्शन के पैरामीटर को पैरामीटर कैसे पास कर सकता हूं?

google.maps.event.addListener(southEast, 'click', showSouth); 
function showSouth() { 
    // do stuff 
} 

यह एक समस्या के बिना काम किया, लेकिन फिर मैं पूरे पृष्ठ और अधिक गतिशील बनाया तो मैं एक समारोह है कि पास होता बनाने का फैसला किया एक आईडी और फिर उस पर आधारित प्रदर्शन, जो मुझे लगता है कि इसे मूल रूप से वैसे भी स्थापित किया जाना चाहिए था। मैं कोड और इस तरह देखने के लिए बदल दिया:

google.maps.event.addListener(southEast, 'click', showArea(1)); 
function showArea(id) { 
    // do stuff based on that id 
} 

समारोह काम किया, लेकिन समस्या यह पृष्ठ लोड पर तुरंत बुलाया जाता है। शोध करने के बाद मैंने सीखा है कि जब आप कोष्ठक के साथ एक फ़ंक्शन कहते हैं, तो उस फ़ंक्शन को तुरंत कॉल किया जाता है और फिर इसका वापसी मान संदर्भित किया जाता है। source

तो अब मैं थोड़ा फंस गया हूं कि फ़ंक्शन पर उस आईडी को पास करने के बारे में तुरंत कैसे जाना है, बिना फ़ंक्शन को कॉल किए। मुझे ऐसा करने के कुछ हैकी तरीके मिल गए हैं जो काम कर सकते हैं, लेकिन मुझे लगता है कि ऐसा कुछ नहीं होना चाहिए जो मुझे एक साथ हैक करना है ...

उत्तर

13

showArea आईडी के साथ काम करने वाला एक फ़ंक्शन लौटाएं।

function showArea(id) { 
    return function() { 
     // do stuff with id 
    }; 
} 

लौटे समारोह बंद कर देता है id से अधिक तो यह है कि यह संदर्भ के लिए जारी है, और हैंडलर के रूप में प्रयोग की जाने वाली addListener को पारित कर दिया है।


वैकल्पिक रूप से, तुम सिर्फ समारोह है कि showArea(1) कॉल इनलाइन सकता है ...

google.maps.event.addListener(southEast, 'click', function() { showArea(1); }); 
function showArea(id) { 
    // do stuff based on that id 
} 

इसका कारण यह है कि आप 1 हार्डकोड कर काम करेंगे। यदि यह एक चर था जो बदल सकता है, जैसे लूप में, आप पहले उदाहरण का उपयोग करेंगे।

+0

दोनों एक आकर्षण की तरह काम करते हैं। आपको बहुत - बहुत धन्यवाद! –

+0

@MattMcClure: आपका स्वागत है। –

+0

धन्यवाद @ स्क्वांट! फ़ंक्शन को वापस करने से निष्पादन चरण की बजाय प्रारंभिक चरण में फ़ंक्शन निष्पादित करने वाले कॉल के मेरे मुद्दे को हल किया गया। –

संबंधित मुद्दे

 संबंधित मुद्दे