Я хочу создать специализированный тип объекта polygon, который обертывает или наследует класс google.maps.Polygon
. Я хочу, чтобы у него было обычное событие edited
, которое можно прослушать, в идеале, через обычный интерфейс addListener
. Это можно сделать?Как создать пользовательские события для объектов google maps api v3?
ответ
Мне нравится ответ JustinY.
Альтернативой может быть вручную вызвав событие так:
function CustomPolygon(options) {
var self = this;
// initialize any options
console.log('init')
}
function edit() {
// do work!!!
// now tell people about it!
google.maps.event.trigger(this, 'edited');
}
// extend CustomPolygon from google.maps.Polygon
CustomPolygon.prototype = new google.maps.Polygon();
CustomPolygon.prototype.edit = edit;
// now you can do
var p = new CustomPolygon({ /*options*/
});
google.maps.event.addListener(p, 'edited', function() {
document.body.innerHTML = 'edited!';
});
p.edit();
См http://jsfiddle.net/stevejansen/hQZcT/
Источник: https://developers.google.com/maps/documentation/javascript/reference#event
В статье Google Developers под названием Fun with MVC мы находим два способа сделать это.
В разделе Binding Properties мы узнаем, что всякий раз, когда метод
set(property, value)
вызывается наMVCObject
, волшебнаяproperty_changed
функция вызывается (если он присутствует).// Prints "something changed to ftw!!!" myObject.something_changed = function(){ console.log('something changed to ' + this.get('something')); } myObject.set('something', 'ftw!!!');
В разделе Outputting Information мы узнаем о том, что менее мистический
addListener()
метод также может быть использован для прослушивания изменений в значениях сset()
. Следующий фрагмент кода выполняет то же самое, что и код выше.// Prints "something changed to ftw!!!" myObject.addListener('something_changed', function(){ console.log('something changed to ' + this.get('something')); } myObject.set('something', 'ftw!!!');
Я предпочитаю метод # 2, потому что она включает в себя меньше черной магии.
Спасибо, что поделились своими знаниями, но, кажется, что у Вас есть задал эти вопросы только по одной причине, чтобы дать свой собственный ответ. Поэтому, когда вас не интересуют ответы, было бы справедливо, если вы сэкономите время на пользователей, которые хотели бы дать ответ и разместить уведомление об этом в вопросе. –
Однако, если вы хотите создать «класс», который наследуется от другого «класса», использование прототипа (как указано в ответе Стива Янсена) является лучшим подходом, потому что с вашей попыткой вы должны определить настраиваемое событие для каждого отдельного пример. –
@ Dr.Molle - ответ на ваш собственный вопрос приемлем, и Джастину не нужно ничего добавлять к вопросу, чтобы объяснить это его намерение: http://stackoverflow.com/help/self-answer http: // blog. stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – duncan
- 1. Google maps api v3 - События
- 2. Google Maps API v3 события
- 3. google-maps-api-v3 getProjection
- 4. Google Maps V3 API setMap
- 5. Google Maps JavaScript API v3
- 6. Google Maps V3 пользовательские контролируют проблемы
- 7. Google maps javascript v3 api
- 8. Google Maps API v3 BrowserIsCompatible
- 9. Ошибка Google Maps Api v3
- 10. Google maps API v3 markers
- 11. Google Maps API V3 infowindow
- 12. Google Maps API v3 смещение
- 13. Google Maps API v3 ImageMapType
- 14. Использование API Google Maps v3
- 15. Google Maps API v3 port
- 16. Google Maps API V3 Event
- 17. Накладки Google Maps API v3
- 18. Удалите событие polyLine Google Maps API v3
- 19. google maps MarkerCluster для api v3
- 20. Пользовательские анимации Google Maps API v3 на маркере
- 21. Google Maps API v3 UNIQUE marker JS
- 22. Google Maps API v3 JavaScript СОБЫТИЙ вопрос
- 23. Google Maps API v3 привязывает события к нескольким картам
- 24. Google Maps v3, события полилинейной мыши
- 25. Google Maps API v3 - нацеливание маркеры
- 26. Обновление API Google Maps API V3
- 27. Как выделить адрес API Google Maps v3?
- 28. Google Maps Api v3 marker. google undefined
- 29. Как создать сетку в Google Maps api v3
- 30. Пользовательские или системные события в API Карт Google v3
Я не знал о методе event.trigger. Думаю, мне это нравится лучше. –
Кстати, люди не рекомендуют использовать новый метод ParentClass(); 'для наследования в javascript; см. http://stackoverflow.com/questions/4152931/javascript-inheritance-call-super-constructor-or-use-prototype-chain –
Спасибо, я знаю обо всем 'new' и' Object.create() ' дебаты. Аргументы для кажутся мне немного педантичными. Я отлично работаю с любой техникой. –