【问题标题】:Trying to call a class method in Google Maps Marker click event callback, in jQuery尝试在 jQuery 中调用 Google Maps Marker 点击事件回调中的类方法
【发布时间】:2012-03-24 21:44:08
【问题描述】:

我在 jQuery 中有一个类来处理谷歌地图及其标记。 在每个标记创建后,我为每个标记添加一个点击监听器:

var marker = new google.maps.Marker(options);
google.maps.event.addListener(marker, "click", function(event) {
    //Do something with event
});

但是,我想使用类中的一个函数:

google.maps.event.addListener(marker, "click", this.onVehiculeClick.bind(this));
onVehiculeClick: function(event) {
    console.log(this);
    console.log(event);
    //Do something with event
}

它在 firefox 和 chrome 上运行良好:它正在记录 this(我的对象)和谷歌地图事件。但不是在 Safari 或 IE(以及其他一些版本的 Firefox)中:它没有调用 onVehiculeClick 方法,如果我在 google.maps.event.addListener 之后添加一个 console.log,则没有任何输出。

如果我删除 .bind(this) 部分,则调用该方法,但我会丢失 this 上下文并且 this 将代表谷歌地图对象。我还尝试在构造函数中添加一个 var that = this,但它在方法上下文中未定义。

我在这里找到了一些我认为可能对我有帮助的东西:Google Maps JS API v3: Need to access Marker Object from inside the Event Handler,但它使用的是原型,我在 jQuery 中找不到任何等效的 curry 方法。

感谢您的帮助!

【问题讨论】:

  • 你在使用图书馆吗? .bind 在 IEdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/…。如果您提供更多代码和/或链接,我相信有一个简单的解决方案。
  • 我只使用 jQuery 和 jQuery Inherit,之后是完整的代码。您是否知道 .bind 的任何解决方法,或者我是否可以获取每个标记的 id,以便我可以使用 jQuery 绑定而不是 Google 的?
  • 我无法在 2 小时前回答自己。我稍后会发布脚本。您可以同时在这里找到它:2shared.com/document/gGg35IeU/gmap.htmluploading.com/files/c527addc/gmap.js

标签: jquery google-maps maps google-maps-markers


【解决方案1】:

尝试将您的 addVehicule 方法更改为:

    addVehicule: function(vehicule) {
    try {
        var marker = this.addMarker(vehicule.latitude, vehicule.longitude);
        var that = this;
        //Observe clicks on vehicule
        google.maps.event.addListener(marker, "click", function(event){
            that.onVehiculeClick(event)
        });

        this.vehicules.push(vehicule);
    } catch (error) {}
}

【讨论】:

  • 有效!非常感谢 :) 我尝试在构造函数方法中设置 var that = this ,然后以与您相同的方式使用它,但它不起作用。为什么我们必须在方法上下文中声明它?
  • 如果你在构造函数中声明它,那么'that'只在构造函数中可用。通过在方法中声明它也可以在点击事件中使用。
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 2019-06-02
  • 2012-05-17
  • 1970-01-01
  • 2019-07-01
  • 2015-02-08
  • 2015-07-25
相关资源
最近更新 更多