将Google Map V.3事件封装为侦听对象方法

时间:2011-03-30 11:13:14

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

我想将google地图多边形(google.maps.Polygon)和地图(google.maps.Map)封装到javascript对象中,并为多边形和地图处理一些事件。这是一些代码

function Landmark(map, polygon) {
    this.map = map;
    this.polygon = polygon;

    // Add a listener for the click event
    google.maps.event.addListener(this.map, 'click', this.addPoint);
    google.maps.event.addListener(this.polygon, 'click', this.addPoint);

    addPoint = function (event) {
        alert("xxx");
    }
}

我使用以下方法调用了函数:

var myLatLng = new google.maps.LatLng(24.886436490787712, -70.2685546875);
    var myOptions = {
                        zoom: 5,
                        center: myLatLng,
                        mapTypeId: google.maps.MapTypeId.TERRAIN
                    };

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    polygonInTest = new google.maps.Polygon({
                                                strokeColor: "#FF0000",
                                                strokeOpacity: 0.8,
                                                strokeWeight: 2,
                                                fillColor: "#FF0000",
                                                fillOpacity: 0.35
                                            });

    polygonInTest.setMap(map);

    var landmark = new Landmark(map, polygonInTest);

但是当我触发事件时,通过点击地图,我从firebug得到了这个错误:

f.e is undefined
[Break On This Error] function de(a,b){var c,d=a.__e3_||{};i...n"+b]=c,c=new ce(a,b,c,3));return c}; 

有谁能指出我哪里做错了并提出一些建议?任何评论或帮助表示赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我最好的猜测是,当你创建一个事件监听器时

google.maps.event.addListener(this.map, 'click', this.addPoint);

您的处理程序尚未定义(即您稍后定义addPoint),因此在addListener()调用this.addPointundefined为{{1}}。当GM到处理程序被调用时,GMaps会搞砸。

至少我是通过查看你的代码来实现我在这一点上遇到问题的方法:)