2014-09-11 16 views
5

đây là mã của tôi trong html để tạo điểm đánh dấu và infowindow (với Ruby on Rails)GoogleMaps InfoWindow xuất hiện ở một góc

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]);}) 

    } 

này gon chỉ là một số phương pháp 'ngu ngốc' Tôi sử dụng để truyền dữ liệu từ ruby ​​trên điều khiển ray đến javascript.

cho tất cả điểm đánh dấu, infowindow tất cả xuất hiện ở góc. Nhưng đối với bản đồ khác của tôi (chỉ có một điểm đánh dấu với infowindow) nó hoạt động tốt.

This infowindow shift to corner Điều gì có thể là vấn đề của tôi? Tại sao infowindow này xuất hiện ở vị trí sai? Thay vì chỉ ở trên điểm đánh dấu?

EDIT:

Sau buổi chụp rắc rối nửa ngày, tôi cảm thấy vấn đề là ở
google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);})

khi nghe gọi lại, giá trị bên trong dấu là i, mà không phải là một con số thực tế , do đó, các điểm đánh dấu hiển thị ở một góc. Tôi cảm thấy vấn đề là không thể vượt qua biến vào addListener, chỉ có thể đặt trong số thực tế. Làm thế nào để giải quyết điều này?

Trả lời

2

Mỗi thể hiện của chức năng công bố bên trong cho cổ phiếu vòng lặp đóng cửa cùng chứa giá trị i, và vì vậy tất cả các cuộc gọi addListener của bạn chủ yếu gọi iw.open(map, undefined) từ i sẽ ra khỏi cuối của mảng vào cuối phiên .

Xem JavaScript closure inside loops – simple practical example để biết các giải pháp mẫu cho vấn đề này và How do JavaScript closures work để biết thêm thông tin về các bao đóng trong JavaScript nói chung.

2

Sự cố xảy ra với thư viện MarkerWithLabel của bạn. Infowindow lấy vị trí từ điểm đánh dấu. Hãy thử sử dụng liên kết này http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.8/docs/examples.html. Nó có tất cả những thứ mà bạn muốn thực hiện. Nó không hoạt động sau đó bạn cũng có thể thiết lập vị trí cho infowindow với chức năng setPosition() chỉ cần vượt qua latlng mà bạn đã sử dụng để tạo điểm đánh dấu và bạn đã hoàn tất.

+0

Cảm ơn bạn ~ liên kết của bạn là giúp đầy đủ, nhưng cửa sổ thông tin của tôi cú pháp giống như liên kết này, và các infowinds hoạt động tốt cho điểm đánh dấu duy nhất. Tôi nghĩ là một số vấn đề nội bộ? –

1

Tôi không khuyên bạn sử dụng đá quý mới chỉ để chuyển dữ liệu từ ruby ​​sang js ... bạn có thể làm điều này đơn giản bằng nhiều cách ... mã của bạn có vẻ tốt nhưng tôi không thể nói cách gon đang xử lý tập lệnh js của bạn. nhìn vào câu hỏi tương tự này, nơi tôi đã thực hiện cùng độngmap với đangmarkersinfowindows .Đây động đang làm việc lớn

see here

Các vấn đề liên quan