2014-09-11 7 views
5

यहाँ उत्पन्न करने के लिए मार्कर और infowindowGoogleMaps InfoWindow एक कोने

var marker=[] 
    function initMap() { 

    var latLng1 = new google.maps.LatLng(1.352083, 103.819836); 
    var myOptions = { 
     zoom: 12, 
     center: latLng1, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
     map = new google.maps.Map(document.getElementById('map_canvas'), myOptions); 

    for(i=0;i<gon.astatic.length;i++){ 


     var latLng = new google.maps.LatLng(gon.astatic[i][1], gon.astatic[i][2]); 
     if(i<2){ 
     marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerV.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]});} 
     else 
     { 
     marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerN.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]}); 
     } 


    var iw =new google.maps.InfoWindow({content: 'HI' }); 
    google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);}) 

    } 

इस gon (रेल पर रूबी के साथ) html में मेरी कोड है पर दिखाई देते हैं सिर्फ कुछ 'बेवकूफ' विधि मैं पर गहरे लाल रंग का से डेटा पारित करने के लिए उपयोग करें जावास्क्रिप्ट के लिए रेल नियंत्रक।

सभी मार्कर के लिए, इन्फॉइंडो सभी कोने पर दिखाई देते हैं। लेकिन मेरे दूसरे मानचित्र के लिए (जिसमें इन्फॉंडो के साथ केवल एक मार्कर है) यह ठीक काम करता है।

This infowindow shift to corner मेरी समस्या क्या हो सकती है? यह infowindow गलत स्थिति में क्यों दिखाई देता है? मार्कर के ठीक ऊपर?

संपादित करें:

के बाद आधे दिन की मुसीबत शूटिंग, मुझे लगता है समस्या पर
google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);})

जब श्रोता वापस कॉल, मार्कर के अंदर मूल्य मैं है, जो एक वास्तविक संख्या नहीं है है , इसलिए मार्कर एक कोने पर प्रदर्शित होता है। मुझे लगता है कि समस्या एडलिस्टर में वैरिएबल पास नहीं कर सकती है, केवल वास्तविक संख्या में डाल सकती है। इसे कैसे हल करें?

उत्तर

2

समारोह पाश शेयरों ही बंद मूल्य i युक्त है, और इसलिए अपने addListener कॉल के सभी के लिए अंदर घोषित के प्रत्येक उदाहरण के अनिवार्य रूप से बुला रहे हैं iw.open(map, undefined)i के बाद से यात्रा के अंत में सरणी के अंत बंद हो जाएगा ।

सामान्य रूप से जावास्क्रिप्ट में बंद होने के बारे में अधिक जानकारी के लिए JavaScript closure inside loops – simple practical example इस समस्या के नमूना समाधान के लिए, और How do JavaScript closures work देखें।

2

समस्या आपकी MarkerWithLabel लाइब्रेरी के साथ है। Infowindow मार्कर से स्थिति लेते हैं। इस लिंक http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.8/docs/examples.html का उपयोग करने का प्रयास करें। इसमें सभी चीजें हैं जिन्हें आप कार्यान्वित करना चाहते हैं। यह काम नहीं करता है तो आप setPosition() फ़ंक्शन के साथ इन्फॉइंडो के लिए स्थिति भी सेट कर सकते हैं, बस मार्कर बनाने के लिए उपयोग किए जाने वाले लैट्लिंग को पास करें और आप कर चुके हैं।

+0

धन्यवाद ~ अपने लिंक पूर्ण मदद है, लेकिन मेरे जानकारी विंडो इस लिंक के समान वाक्यविन्यास, और infowinds काम करता है एकल मार्कर के लिए ठीक है। तो मुझे लगता है कि कुछ आंतरिक समस्या है? –

1

मैं रूबी से जेएस तक डेटा पास करने के लिए नए मणि का उपयोग करने की सलाह नहीं देता ... आप इसे कई तरीकों से कर सकते हैं ... आपका कोड अच्छा लगता है लेकिन मैं यह नहीं कह सकता कि gon आपकी जेएस स्क्रिप्ट को कैसे प्रबंधित कर रहा है। कृपया ले लो इस समान प्रश्न पर एक नज़र मैं कहाँ गतिशीलmarkers और infowindows है इस कोड के साथ एक ही गतिशीलmap को लागू किया है काम कर रहा है महान

see here

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