【问题标题】:Call function for content of infowindow when opening not only on init不仅在 init 上打开时调用 infowindow 内容的函数
【发布时间】:2018-11-28 13:55:12
【问题描述】:

我有一些带有标记的对象。这些对象具有动态数据,我想将它们输出到对象标记的信息窗口中。 到目前为止,这就是我所拥有的:

function createRandomObjectWithAMarker() {
  var marker;
  var aData = "dataToDisplay";
  var infowindow = new google.maps.InfoWindow({
    content:callThisFunctionWhenOpenWindow(aData)
  });
  marker.addListener('click', function() {
    infowindow.open(map, marker);
  });
  randomObject = {
    /*
    someData
    */
    marker: marker
  };
  return randomObject;
}

我希望当我单击标记以将返回的modifiedData 显示为infoWindowcontent 时调用此函数。

function callThisFunctionWhenOpenWindow(aData){
  /*
  do some stuff on aData
  */
  return modifiedData;
}

但实际上,这个函数只被调用一次:只有当我用createRandomObjectWithAMarker() 调用初始化randomObject 时。因此,如果我在一段时间后显示infoWindow,当数据与脚本启动时不同时,它仍然会显示相同的输出。 有没有办法做到这一点?如果是怎么办?

【问题讨论】:

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


【解决方案1】:

试试这样的?

这样,信息窗口(及其数据)仅在您单击标记时创建

function createRandomObjectWithAMarker() {
  var marker;
  var aData = "dataToDisplay";
  marker.addListener('click', function() {
    var infowindow = new google.maps.InfoWindow({
      content:callThisFunctionWhenOpenWindow(aData)
    });
    infowindow.open(map, marker);
  });
  randomObject = {
    /*
    someData
    */
    marker: marker
  };
  return randomObject;
}

【讨论】:

  • 不,这不是我所说的“好”。这将为每个标记创建一个 InfoWindow 对象,这可能不是您想要的,特别是如果您有大量标记(+ 它会强制您单独处理每个 InfoWindow)。创建一个InfoWindow对象,并使用InfoWindow对象的setContent()方法改变其内容。
猜你喜欢
  • 2015-09-18
  • 2018-03-17
  • 1970-01-01
  • 2012-05-14
  • 2019-03-12
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多