javascript - 谷歌地图 API v3 信息窗口 + flot

标签 javascript google-maps-api-3 flot infowindow

我正在尝试在 infowindow 中绘制图表, 但 flot 没有执行——也没有抛出任何错误。我在 flot 论坛上读到,人们经常在做这样的事情时遇到麻烦,因为占位符元素必须可见(这里可能是转移注意力)。

我能够获得以下内容以在不同的元素中适本地生成图表:

$.plot(
    $("#placeholder"),
    [ f_data[loc] ],
    {
        grid: { hoverable: true, clickable: true },
        series: {
           bars: { show: true },
           clickable:true,
           color:'#3FA9F5',
           shadowSize: 0
       },//series
       xaxis: {
           tickDecimals:0,
           tickSize:1
       }//xaxis
    }
);//$.plot

但是当我将以上内容放入 google.maps.event.addListener() 或从中引用时,它什么都不做(甚至不添加 <canvas> 元素)。

我确保把它放在 infowindow.open(map,marker); 之后,所以这让我觉得占位符元素是可见的。我还确定了 #placeholder具有实质/定义的维度。

附言我尝试了 Mike Williamson 报告的最终解决方案 Google Maps V3: Loading infowindow content via AJAX ,但这也不起作用。

编辑
在 infowindow 之外工作的 flot 示例:index2.html
flot 在信息窗口内不工作的示例(addListener 'domready'):index3.html
flot 在信息窗口(setTimeout)内不工作的示例:index4.html

最佳答案

问题是内容 div 尚未附加到域(因此 $("#placeholer") 无法找到它)。在运行代码绘制图形之前,您需要等待 infowindow domready 事件触发,如下所示:

更新:下面的代码适用于我的本地副本(我确实修改了 css,但我认为这不是必需的)。

google.maps.event.addListener(marker, 'click', (function(marker, locale, s, flot_data) {
  return function() {
    var fname = 'http://clients.frende.me/incognito/images/'+date+'_'+locale.toLowerCase().replace(/\s/g,'')+'.svg';
    infowindow.setContent('<div id="gMaps_infowindow"><h3>'+locale+' ('+hour+':00): $'+s.total+'</h3><div id="flotIW" style="height:200px; width:350px;" name="'+locale+'"></div></div>');

  google.maps.event.addListener(infowindow, 'domready', function() {(function(f_data,loc) {
    $.plot(
      $("#flotIW"),
      [ f_data[loc] ],
      {
        grid: { hoverable: true, clickable: true },
        series: {
          bars: { show: true },
          clickable:true,
          color:'#3FA9F5',
          shadowSize: 0
        },//series
      xaxis: {
        tickDecimals:0,
        tickSize:1
      }//xaxis
    }
  );//$.plot
  })(flot_data,locale)});

    infowindow.open(map, marker);
    //open_popUp(flot_data,locale);
    //open_drawGraph(locale);
  }//return
})(marker, locale, s, flot_data));//google.maps.event.addListener

(另一种选择是直接创建域节点,使用它来呈现您的图形,并将其传递到 setContent 调用(它将采用字符串或 DOM 节点)。

关于javascript - 谷歌地图 API v3 信息窗口 + flot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665108/

相关文章:

javascript - jquery 阻止重定向直到动画之后

javascript - Vue.js:如何更新 "list"计算属性中的单个项目?

javascript - 对与流程图一起使用的数组格式进行了细微更改

javascript - jQuery FLOT图表动态Y轴

jquery - 图表类别文本的自定义样式

javascript - 使用 Typescript 将数组写入文本文件并换行

javascript - 为什么我的 Google Picker 窗口不会出现在浏览器中

javascript - 距离矩阵不返回大数据的距离

javascript - Google Maps API v3 : Geocoding Reversal, 仅打印出一个标记(javascript)

java - 如何使用 Google Line Chart API 在 Blackberry 应用程序中传递动态数据?