Twitter Bootstrap Popver中的谷歌地图

Lee*_*ley 2 html javascript html5 google-maps twitter-bootstrap

我正在使用Twitter的Bootstrap,并希望在popover中显示Google Map .

它现在的工作方式我正在做这样的事情

$ ->
  $('.thumbnails a.js-popover').popover
    html: true,
    content: ->
      uid = $(this).data('profileUid')
      popover_container = $('.popover-contents:data(profileUid=' + uid + ')')
      _.each window.Maps, (map) ->
        google.maps.event.trigger map, 'resize' // I hoped this would re-draw the map
      popover_container.html()
Run Code Online (Sandbox Code Playgroud)

popover从.popover-contents隐藏的div 加载它的内容,并连接到awith data属性(这样我就可以找到正确的popover来显示)

当不在弹出框中时,地图可以完美地工作

当不在popover中时,地图可以很好地工作,我认为它与通过html()jQuery 复制到另一个DOM元素有关.Twitter的bootstrap不提供modal opened回调,我真的不确定如何使地图工作.

在此输入图像描述

正如你所看到的地图可以正常工作的完整资料页面上,标记是一样的(轨道部分),和JavaScript是共享的,太-我只能承担的GoogleMaps API真的不喜欢有它的DOM乱用,因此导致问题.

rjz*_*rjz 6

如果你使用的是popovers,你最好的选择可能是使用谷歌的静态API,避免与交互式地图相关的麻烦.借用文档中的一个非常简单的案例,您可能会这样做:

var options = { content: '<img src="http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap&sensor=false">' };

$('#example').popover(options)
Run Code Online (Sandbox Code Playgroud)

将其包装成可重用的函数会产生:

var getMap = function(opts) {
  var src = "http://maps.googleapis.com/maps/api/staticmap?",
      params = $.extend({
        center: 'New York, NY',
        zoom: 14,
        size: '512x512',
        maptype: 'roadmap',
        sensor: false
      }, opts),
      query = [];

  $.each(params, function(k, v) {
    query.push(k + '=' + encodeURIComponent(v));
  });

  src += query.join('&');
  return '<img src="' + src + '" />';
}

var content = getMap({center: 'Fritz-Walter Stadion, Kaiserslautern'});
$('#example').popover({ content: content })
Run Code Online (Sandbox Code Playgroud)