2

针对 git://github.com/GoogleWebComponents/google-map.git#* 使用 google-map v1.1.10

我像这样建立我的标记:

<template>
   <site-data sites="{{sites}}"> </site-data>
   <google-map fit-to-markers >
   <template is="dom-repeat" items="{{sites}}">
    <template is="dom-repeat" items="{{item}}">
      <google-map-marker latitude={{item.latitude}}
                         longitude={{item.longitude}}
                         title="{{item.project_name}}"
                         >
        <h1>{{item.project_name}}</h1>
        <p style="margin: 0;">Location: <b>{{item.town}}, {{item.country}}</b></p>
        <p style="margin: 0;">Tech Description: <b>{{item.tech_desc}}</b></p>
      </google-map-marker>
    </template>
  </template>
</google-map>

在初始加载 web 应用程序时,一切运行良好。我可以单击标记,信息窗口会显示内容。但是,如果我更改站点数组中的任何值,我似乎会丢失信息窗口和/或点击事件。我必须刷新浏览器才能回到我的初始状态(点击显示信息窗口)。

此外,如果我更改纬度/经度并且悬停显示工具提示,标记位置将完美更新。标题,也恰如其分。

我添加了一个单击事件,该事件调用了一个 console.log 到单击事件。在 {{sites}} 绑定中更改值之前,它运行良好,所以当谷歌地图更新自身时,我似乎丢失了点击事件?

此元素中没有脚本。

如果我可以提供更多信息,请告诉我。

在此先感谢,斯科特

4

1 回答 1

0

GoogleMapMarker 似乎存在一些问题。我有一些你可以尝试的技巧,但你应该制作一张问题单,以便有人可以更深入地了解。

一个问题是更新 MapMarker 的 MutationObserver 没有观察到characterData,所以当 MapMarker 的简单文本内容发生变化时它不会触发。

另一个问题是attach/detach实现似乎不是互补的。例如,detach移除 MutationObserver 并且attach从不将其放回原处。

最后,在某些情况下,info窗口与 MapMarker 断开连接。

这是一个 JSBin,其中有您所描述的 GoogleMapMarker 设置的三种突变:http: //jsbin.com/hobixi/edit ?html 。

  • 添加一个新的地图标记似乎工作得很好。

  • 由于我描述的 MutationObserver 问题,修改现有标记的内容失败。我通过猴子修补GoogleMapMarker的_contentChanged方法来解决这个问题:

例子:

marker._contentChanged = function() {
  if (this._contentObserver)
    this._contentObserver.disconnect();
    // Watch for future updates.
    this._contentObserver = new MutationObserver( this._contentChanged.bind(this));
    this._contentObserver.observe( this, {
      childList: true,
      subtree: true,
      ///----------------
      // monkey patch 
      characterData: true
      //-----------------
    });
 ...
  • 最后,我人为地做了一个例子,从 DOM 中移除一个标记并将其放回原处。如上所述,这失败了,所以我打了补丁attacheddetached就像这样:

例子:

  marker.detached = function() {
    if (this.marker) {
      google.maps.event.clearInstanceListeners(this.marker);
      this._listeners = {};
      this.marker.setMap(null);
      ///----------------
      // monkey patch 
      this.info = null;
      //-----------------
    }
    if (this._contentObserver)
      this._contentObserver.disconnect();
  };
  marker.attached = function() {
    // If element is added back to DOM, put it back on the map.
    if (this.marker) {
      this.marker.setMap(this.map);
      ///----------------
      // monkey patch 
      this._contentChanged();
      //-----------------
    }
  };

您没有指定要触发的更改的性质。clicking doesn't show the info window问题似乎是当标记和信息变得混乱时会发生什么,也许有发生attach/detach

玩得很好,诱使我调查此事。:)

于 2016-02-11T07:03:52.033 回答