2
Я работаю над приложением, использующим API Карт Google. У меня нет предыдущего опыта работы с javascript. То, что я пытаюсь сделать, это следующее:JavaScript Event Handler Scope
function SpeedMarker(position) {
this.speed = 50;
this.marker = new google.maps.Marker({
position: position,
map: map,
icon: 'http://maps.google.com/mapfiles/markerA.png',
zIndex: Math.round(position.lat() * -100000) << 5
});
google.maps.event.addListener(this.marker, 'click', this.ShowInfoWindow)
}
SpeedMarker.prototype.ShowInfoWindow = function() {
var contentString = 'stuff';
infowindow = new google.maps.InfoWindow({
content: contentString
});
infowindow.open(map, this.marker);
}
Вопрос заключается в том, что событие щелчка происходит в объекте документа и this.marker не существует в этом контексте.
Есть ли способ обработать событие в объекте SpeedMarker, который я создал?
ОК, так что это может быть специфическими для Google Maps, но вот что происходит, когда Я запускаю код выше (а не Function.bind): - обработчик вызывается, когда я вызывать конструктор, не нажимая на маркер (это не происходит, если я использую исходную версию с предупреждением) -если я пытаюсь запустить этот обработчик позже, я получаю сообщение об ошибке из карт Google, говоря: не удалось найти свойство ' xx ', (я предполагаю, потому что я больше не в контексте карты, поэтому this.xx не существует) – user472875
Я предполагаю, что вы пропустили анонимную функцию и передаете что-то вроде этого: '... addListener (this .marker, 'click', self.ShowInfoWindow()); '... что неправильно. –
* Facepalm * - моя ошибка :(Работает отлично сейчас благодаря – user472875