Инкапсулируйте событие Google Map V.3 для прослушивания методов объекта - PullRequest
0 голосов
/ 30 марта 2011

Я хочу инкапсулировать полигон карты 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 голосов
/ 17 мая 2011

Мое лучшее предположение заключается в том, что при создании прослушивателя событий

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

ваш обработчик еще не определен (т.е. вы определяете addPoint позже), поэтому во время addListener() call this.addPoint - это undefined.И GMaps испортится позже, когда придет время вызывать обработчик.

По крайней мере, так я понял, что у меня возникла проблема, посмотрев на ваш код:)

...