5

Tôi có một bản đồ được hỗ trợ bởi Google Maps Javascript API3 trong ứng dụng web jQuery Mobile của tôi. Tôi đã thêm một vòng tròn có đường viền màu đen trên đó.Tại sao việc căn giữa bản đồ của tôi bị tắt trong ứng dụng jQuery Mobile/API Google Maps của tôi?

Nếu bạn truy cập trực tiếp vào trang này của ứng dụng của tôi bằng bản đồ, bản đồ được căn giữa chính xác ở giữa vòng tròn.

http://goo.gl/XvLST

enter image description here

Nếu bạn đi đến trang chủ của ứng dụng của tôi đầu tiên (http://goo.gl/0IWgE) và sau đó nhấp vào theo cách của bạn vào trang với bản đồ, bản đồ là

  1. làm trung tâm erringly (Bản đồ nên được căn giữa ở giữa vòng tròn).
  2. thiếu toàn bộ khu vực có màu xám.

enter image description here

Tại sao erring bản đồ khi tôi nhấp vào trang với bản đồ từ trang chủ của tôi, nhưng làm việc một cách chính xác nếu tôi truy cập vào trang với bản đồ trực tiếp?

Tôi không thể sử dụng Ajax để tải trang bản đồ với data-ajax='false'. Tuy nhiên, tôi không thể thực sự làm điều này bởi vì một ứng dụng di động không cho phép tải không phải là ajax.

google.maps.event.trigger(map, 'resize') dường như định vị lại bản đồ khi tôi nhập nó vào bảng điều khiển dành cho nhà phát triển web Chrome, nhưng tôi không chắc chắn nên gọi nó ở đâu trong javascript của tôi.

+0

Tôi không thấy bất cứ điều gì ở đây http://dl.dropbox.com/u/1531353/CS164/mockups/map%20askew/index.html, bạn có thể đặt cho ảnh chụp màn hình khi được sắp xếp không phù hợp – defau1t

+0

Nếu bạn nhấp vào liên kết trên trang đó, bạn sẽ thấy một bản đồ bị căn giữa. Thật kỳ lạ, liên kết được căn giữa nếu bạn truy cập http://goo.gl/XvLST trực tiếp. – dangerChihuahua007

+0

Tôi đã thêm ảnh chụp màn hình trong trường hợp nó sẽ giúp làm rõ vấn đề của tôi. Cảm ơn. – dangerChihuahua007

Trả lời

7

Do trang được tải thông qua ajax (khi đến từ chỉ mục) - sự kiện trang bạn đang sử dụng có thể đang được gọi trước DOM hoàn toàn sẵn sàng. GMaps mong đợi trang sẵn sàng.

Thử sử dụng một sự kiện khác không phải là pageinit. Có vẻ như các trang có thể là một trang tốt (vì nó chạy sau khi bất kỳ hoạt ảnh nào đã hoàn thành) http://jquerymobile.com/demos/1.0/docs/api/events.html

Hoặc có thể bạn có thể thực hiện cuộc gọi đến sự kiện thay đổi kích thước bản đồ, trong một sự kiện trang.

+0

Cảm ơn bạn, tôi sẽ thử điều đó càng sớm càng tốt. Chỉ tò mò thôi, có cách nào có hệ thống để xem tất cả các sự kiện được kích hoạt cho một yếu tố cụ thể trên một trang không? – dangerChihuahua007

+0

Không phải là tôi biết. Sẽ cần phải lắng nghe tất cả các sự kiện và đăng nhập chúng. Nhưng bạn cần phải biết tất cả các sự kiện tồn tại để làm việc đó :) – barryhunter

+1

Yup thay đổi 'pageinit' thành 'pageshow' trên trang của bạn đã hoạt động đối với tôi. – codaniel

1

Trang có tải lại giữa trang chủ và bản đồ không? Nếu không, và nếu bạn đang tạo hoặc thay đổi kích thước div, bạn sẽ cần gọi google.maps.event.trigger(map, 'resize') sau khi thay đổi div (thay đổi kích thước hoặc xóa màn hình: không có gì). (được chỉnh sửa để hiển thị mã để kích hoạt sự kiện, nhờ @Heitor Chang)

+0

Xin cảm ơn, nhưng tôi gặp phải lỗi này với 'map.resize()' khi tôi gọi nó là: 'Loại lỗi không hợp lệ: Đối tượng # không có phương thức 'thay đổi kích thước'. Tham chiếu API của Google Maps cũng không đề cập đến phương thức 'resize()' được liên kết với đối tượng Map. http://goo.gl/ORciv – dangerChihuahua007

+1

Thử google.maps.event.trigger (bản đồ, 'thay đổi kích thước')? Đó là trong "sự kiện" của google.maps.Map trong API ref –

+0

Cảm ơn bạn, trong đó các chức năng của tôi bạn nghĩ tôi nên gọi nó là gì? Tôi đã thử gọi nó trong 'addCircle()' vô ích. – dangerChihuahua007

0

Gọi google.maps.event.trigger(mapObj, "resize"); trên pageshow hoặc pagechange

0

Trong trường hợp của tôi, cách giải quyết của tôi là $('#mapdiv').trigger('create'); hoạt động tốt. nhưng trong những trường hợp khác tôi không biết nó hoạt động.

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