2013-11-04 7 views
5

ताज़ा मैं आधिकारिक दस्तावेज में इन सरल निर्देशों का पालन किया गया था: https://developers.google.com/maps/documentation/javascript/tutorialगूगल के नक्शे प्रदर्शित नहीं करता जब तक मैं

सब कुछ ठीक काम करता है जब मैं पहली बार के लिए साइट खोलें। नक्शा सामान्य रूप से दिखाता है। समस्या यह है कि जब मैं साइट के अन्य हिस्सों में नेविगेट करता हूं। उस स्थान पर लौटने के बाद जहां नक्शा होना चाहिए, नक्शा दिखाई नहीं देता है।

<ul> 
    <li><%= link_to "Home", root_path %></li> 
    <li><%= link_to "About", about_path %></li> 
    <li><%= link_to "Contact", contact_path %></li> 
</ul> 

अंदर जावास्क्रिप्ट "संपर्क":

यहाँ बुनियादी संरचना है

<script type="text/javascript" 
     src="https://maps.googleapis.com/maps/api/js?key=xxx&sensor=false"> 
    </script> 
    <script type="text/javascript"> 
     function initialize() { 
     var mapOptions = { 
      center: new google.maps.LatLng(-34.397, 150.644), 
      zoom: 8, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(document.getElementById("map-canvas"), 
      mapOptions); 
     } 
     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 

<h1>Contact</h1> 
<p> 
    Address & phone number 
</p> 

<div id="map-canvas" style="width: 35em; height: 35em;"/> 

तो, अगर मैं "घर" पृष्ठ पर साइट खोलने और फिर नेविगेट करने के लिए "संपर्क", कोई नक्शा नहीं है लेकिन अगर मैं "संपर्क" साइट रीफ्रेश करता हूं, तो मानचित्र प्रकट होता है। क्या समस्या हो सकती है?

धन्यवाद।

EDIT1:

मैं तैयार समारोह के अंदर अपने कोड डालने की कोशिश की:

$.getScript('https://maps.googleapis.com/maps/api/js?key=xxx&sensor=false'); 

     var mapOptions = { 
      center: new google.maps.LatLng(-34.397, 150.644), 
      zoom: 8, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(document.getElementById("map-canvas"), 
      mapOptions); 

लेकिन जब मैंने उसे ऐसा करते हैं, इस लाइन पर कोड टूट जाता है:

center: new google.maps.LatLng(-34.397, 150.644), 
+0

का उपयोग कर भरी हुई है? – apneadiving

+0

हां, मैं रेल का उपयोग कर रहा हूं 4. – Cristiano

+0

ठीक है तो यह टर्बोलिंक के कारण, त्वरित रूप से ठीक करने के लिए अपने लेआउट में Google स्क्रिप्ट डाल दें। बीटीडब्ल्यू, मैंने अभी gmaps4rails का एक नया संस्करण जारी किया है, यह मदद कर सकता है! – apneadiving

उत्तर

1

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

google.maps.event.trigger(map, 'resize'); 

वैकल्पिक रूप से इसे कहीं भी "नेविगेट" करने के बाद कहा जा सकता है जहां यह होना चाहिए लेकिन यह प्रदर्शित नहीं हो रहा है।

+0

वे सभी एक HTML फ़ाइल में निहित नहीं हैं। समस्या यह है कि जब भी मैं किसी अन्य लिंक पर क्लिक करता हूं तो मानचित्र गायब हो जाता है। केवल उस साइट का ताज़ा करें जहां नक्शा नक्शा दिखाता है। – Cristiano

+0

दुर्भाग्यवश, google.maps.event.trigger (मानचित्र, 'आकार बदलें'); मदद नहीं करता है – Cristiano

3

क्या आप टर्बोलिंक सक्षम के साथ रेल 4 का उपयोग कर रहे हैं? यदि ऐसा है, तो load ईवेंट होम पेज से संपर्क पृष्ठ पर जाने पर आग नहीं लगेगा - लेकिन रीफ्रेश को पूरी तरह से लोड करने से पूरे पृष्ठ को लोड किया जाता है, इसलिए लोड इवेंट आग लगती है। यह आपके द्वारा वर्णित व्यवहार के अनुरूप होगा।

यह आपकी स्क्रिप्ट ब्लॉक के अंत में 'load' लाइन के अलावा जोड़ कर देखें,:

google.maps.event.addDomListener(window, 'page:load', initialize); 
+0

धन्यवाद लेकिन यह कोई फर्क नहीं पड़ता। मुझे अभी भी ताज़ा करने की जरूरत है। – Cristiano

+0

यह हो सकता है कि विंडो 'पृष्ठ: लोड' ईवेंट के लिए सही दायरा न हो। JQuery $ (दस्तावेज़) .ready और $ (दस्तावेज़) .on ('पेज: लोड') अक्षर श्रोताओं, अक्षत द्वारा संदर्भित, उपयुक्त ट्रिगर्स होंगे - आप jQuery के सुझाए गए श्रोता को jQuery के साथ बदल सकते हैं। –

+0

मैंने कई संयोजनों की कोशिश की लेकिन यह काम नहीं करता है। मैंने अपना प्रश्न अपडेट किया। – Cristiano

0

समस्या, अपने turbolinks साथ रहने के लिए एक समारोह में अपने सभी गतिविधियों के लिए बाध्य और फोन है कि लगता है document.ready पर साथ ही साथ document.page:load ईवेंट पर कार्य करें।

$(document).ready(PageSetupFunction); 
$(document).on("page:load", PageSetupFunction); 

असल में यहां दस्तावेज़। पृष्ठ को रीफ्रेश करते समय पहले ही कॉल किया जाएगा। लेकिन पृष्ठ: एक बार जब आप इस पृष्ठ पर किसी अन्य लिंक से आते हैं तो भार ईवेंट बुलाया जाएगा।

+0

मैंने कई संयोजनों की कोशिश की लेकिन इसे काम पर नहीं लाया जा सकता। मैंने इस कोड को तैयार फ़ंक्शन में रखा है: $ .getScript ('https://maps.googleapis.com/maps/api/js?key=xxx&sensor=false'); वर mapOptions = { केंद्र: नई google.maps.LatLng (-34.397, 150.644), ज़ूम: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map (document.getElementById ("map-canvas"), मानचित्र विकल्प); - समस्या यह है कि जब मैं उस कोड को डालता हूं, कुछ भी काम नहीं करता है, यहां तक ​​कि अन्य जावास्क्रिप्ट फ़ंक्शंस जो काम नहीं करते हैं, काम करने से पहले काम करते हैं। – Cristiano

+0

हालांकि मैंने Google मानचित्र के साथ काम नहीं किया है, लेकिन मुझे Google चार्ट एपीआई के साथ एक ही समस्या का सामना करना पड़ा है। ऐसा लगता है कि आपको अपने जावास्क्रिप्ट में कुछ त्रुटि हो रही है जो इसे निष्पादित करने के बाद अन्य सभी स्क्रिप्ट को रोकता है, आपको इसे अपने ब्राउज़र कंसोल में देखना होगा – Akshat

+0

हां, त्रुटि यहां है: केंद्र: नया google.maps.LatLng (-34.397, 150.644) । मुझे नहीं पता कि यह लाइन एक समस्या क्यों है यदि यह Google से सी/पी है। – Cristiano

1

बस उस फ़ंक्शन में देरी प्रदान करें जो Google मानचित्र को प्रारंभ करता है और यह ठीक काम करेगा।

setTimeout(function() { 
    //code for initializing the google map 
}, 1000); 
1

टाइमआउट को छह सेकंड में सेट करना मेरे लिए काम करता है। नक्शा जितना बड़ा होगा उतना बड़ा होगा, इसलिए अपने टाइमआउट के आधार पर अपना टाइमआउट गेज करें।

0

मैं इस ठीक करने के बाद कोड ट्रिगर करने के बाद पेज आप रेल 4 का उपयोग करते हैं jQuery

$(document).on("pageshow","#contact",function(){ 
    initialize(); 
}); 
संबंधित मुद्दे