TL; DR
Является ли PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
"правильным" способом наследования Backbone View от другого "класса"?
Длинное чтение
Мы переделываем наш сайт с использованием Backbone и работаем над включением некоторых функций отображения.
У меня есть представление Backbone, которое обрабатывает размещение <div>
s в определенных точках в пределахокно браузера;Это кажется естественным для расширения, чтобы API Google Map поместил их в географические координаты.
В соответствии с Google API , для создания пользовательского наложения вы создаете новый объект.и установите прототип для этого объекта в новый экземпляр google.maps.OverlayView.Затем вы реализуете три функции поверх этого объекта, чтобы объект реагировал на:
onAdd
draw
onRemove
Где onAdd
отвечает за генерацию HTML и его применение поверх Карты.Впоследствии это вызывает draw
, который правильно позиционирует элемент в соответствии с указанными вами парами и границами LatLng.onRemove
вызывается, когда вы хотите избавиться от своего слоя.
Поэтому я изменил свой вид, чтобы включить эти три метода (которые просто вызывают render и unrender и привязаны к моей коллекции).И затем, чтобы «волшебство произошло», я делаю:
PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
Это выглядит правильно?Я могу опубликовать код для представления и модели, на которых он основан, но, честно говоря, они не имеют отношения к этому примеру - код работает, и я могу разместить пользовательские div
, сгенерированные с помощью модели, представления и модели Backbone.Компоненты контроллера на карте без проблем, что я спрашиваю, я думаю (и, возможно, этот вопрос более уместен для programmers.se, так что дайте мне знать, и я перенесу его).
Кажется, этобыть самым простым способом сделать мой PinView одновременно Backbone View и Google Maps OverlayView, но я не на 100% удобен с наследованием прототипов, чтобы знать, делаю ли я что-то «неправильно» или что-то сломаю в будущем.