如果已绑定事件处理程序,如何才能拖动标记?

时间:2017-11-07 12:46:52

标签: javascript reactjs google-maps google-maps-markers

当处理程序是绑定函数时,有没有办法确定拖动哪个Marker?这是我的反应组件的片段:

constructor() {
   this.handleMarkerMove = this.handleMarkerMove.bind(this);
}

createMarker() {
   const marker = new google.maps.Marker({...}); 

   google.maps.event.addListener(marker, "dragend", this.handleMarkerMove);
}

handleMarkerMove(e) {
   const latitude = e.latLng.lat();
   const longitude = e.latLng.lng();
   const theMarker = ???

   // this = the class when .bind(this) registered in constructor
}

如果我不使用this.handleMarkerMove = this.handleMarkerMove.bind(this),我将失去对this的引用,这就是Google地图发送Marker的方式。

是否可以在不创建嵌套函数的情况下同时将thisMarker同时发送到handleMarkerMove(e)

2 个答案:

答案 0 :(得分:1)

我相信你没有可靠的方法(除了你所说的),但有一个可能有助于将google mapsreact here整合的回购

答案 1 :(得分:1)

您无法使用.bind(this),因为this关键字将引用该类本身。最好的选择是使用嵌套函数,没有错: - )。

google.maps.event.addListener(marker, 'dragend', (e) => this.handleMarkerMove(e));

您还可以将标记添加为第二个参数:

const marker = new google.maps.Marker({...}); 

google.maps.event.addListener(marker, 'dragend', this.handleMarkerMove.bind(this, marker));

现在,您可以通过事件处理程序中的第二个参数访问标记对象:

handleMarkerMove(e, marker) {...}