TL; DRMezcla mapas de Google superposiciones personalizadas con Backbone Vistas
¿Es PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
la forma "correcta" de tener una columna vertebral Ver heredan de otra "clase"?
lectura larga
Estamos rehaciendo nuestro sitio usando Backbone y estamos trabajando en la inclusión de algunas funciones de mapeo.
Tengo una vista Backbone que maneja la colocación de <div>
s en puntos específicos dentro de la ventana del navegador; esto parece algo natural de ampliar para que el Map API de Google los ubique en coordenadas geográficas.
De acuerdo con Google API, para generar una superposición personalizada crea un nuevo objeto y establece el prototipo para ese objeto en una nueva instancia de google.maps.OverlayView. A continuación, poner en práctica tres funciones en la parte superior de ese objeto para que el objeto responde a:
onAdd
draw
onRemove
Dónde onAdd
es responsable de generar el código HTML y luego aplicarlo en la parte superior del mapa. A continuación, llama al draw
, que posiciona el elemento correctamente de acuerdo con los pares y límites LatLng que ha proporcionado. onRemove
se llama cuando desea deshacerse de su capa.
Así que modifiqué mi vista para incluir estos tres métodos (que solo llaman a renderizar y deshacer y están vinculados a mi colección). Y después de hacer "que la magia suceda" Estoy haciendo:
PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
se ve este derecho? Puedo publicar el código para la Vista y el Modelo en el que se basa, pero, sinceramente, son irrelevantes para este ejemplo: el código funciona y puedo colocar div
personalizados generados a través del modelo Backbone, la vista y los componentes del controlador en el mapa sin problema, lo que estoy preguntando, supongo (y tal vez esta pregunta sea más apropiada para los programadores. Por lo tanto, avíseme y la moveré).
Esta parece ser la manera más fácil de hacer que mi PinView sea una Vista Backbone y una Vista de superposición de Google Maps, pero no estoy 100% cómodo con la herencia prototípica para saber si estoy haciendo algo "incorrecto" o rompiendo algo en algún lugar del camino.
Hm, que podría ser en realidad más limpio para hacer una PinView como BackboneView con los mapas de Google OverlayView como una propiedad en el PinView vinculado a esa superposición. No estoy seguro acerca de las clases internas de google, ya que están oscurecidas con todas las minificaciones, pero creo que prefiero evitar mezclar estas dos ya que son clases de tipos y tipos diferentes. quien sabe lo que podría pasar (aunque si funciona, ¡háganoslo saber!). Algo que me encantaría probar con un poco más, si tuviera el tiempo ¡Eh! –
Está funcionando, supongo que mi pregunta era más "¿es así como se hace una herencia múltiple usando herencia prototípica" que "debería realmente estar haciendo esto?" Las cosas de Backbone son súper limpias y bien pensadas, así que no estoy preocupado por algún tipo de colisión del espacio de nombres Prototype, y aunque la fuente de Google está minimizada, cuando juegas con ella en el depurador, el prototipo para OverlayView() objeto es en realidad muy simple también. – tkone