google-maps-api-3 - 将 Google map 自定义叠加层与主干 View 混合

标签 google-maps-api-3 backbone.js underscore.js prototypal-inheritance

TL;DR

PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)从另一个“类”继承主干 View 的“正确”方式?

长读

我们正在使用 Backbone 重做我们的网站,并正在努力包括一些映射功能。

我有一个处理放置 <div> 的主干 View s 到浏览器窗口中的特定点;为了让 Google 的 Map API 将它们放置在地理坐标上,这似乎是一件很自然的事情。

根据Google API ,为了生成自定义覆盖,您创建一个新对象并将该对象的原型(prototype)设置为 google.maps.OverlayView 的新实例。然后,您在该对象之上实现三个函数,以便该对象响应:
onAdddrawonRemove
在哪里 onAdd负责生成 HTML,然后将其应用到 Map 之上。这随后调用 draw根据您提供的 LatLng 对和边界正确定位元素。 onRemove当你想摆脱你的层时被调用。

所以我修改了我的 View 以包含这三个方法(它们只是调用 render 和 unrender 并绑定(bind)到我的集合)。然后为了让“奇迹发生”,我正在做:
PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
这看起来对吗?我可以发布 View 和它所基于的模型的代码,但老实说,它们与这个示例无关——代码有效,我可以放置自定义 div s 通过 map 上的 Backbone 模型、 View 和 Controller 组件生成,没有问题,我想我在问什么(也许这个问题对程序员来说更合适,所以让我知道,我会移动它)。

这似乎是让我的 PinView 既是主干 View 又是谷歌地图 OverlayView 的最简单方法,但我不是 100% 对原型(prototype)继承感到满意,以知道我是否在做“错误”的事情或在某个地方破坏了某事.

最佳答案

好主意!我通常对天气持怀疑态度,当一切正常时,你是否“正确”,所以如果你没有遇到阻碍,并且覆盖出现并做了应该做的事情,我会说你是.

不过,要仔细检查一件事:

这不是(也不能)是“真正的”多重继承——这个概念在基于原型(prototype)的语言中并不真正相关:一个方法的实现将不可避免地“获胜”并覆盖另一个实现,至少在使用时_.extend()
这意味着如果 Backbone.View 中存在同名的成员或方法和 google.maps.OverlayView您的 _.extend() 中的最后一个call 将接管。但是当我使用 Chrome 的开发者工具检查它们时,我没有看到任何明显的这种碰撞。

所以我的建议:继续使用这个,只是测试了很多。我很想在某个时候看到这种技术的一个例子。

关于google-maps-api-3 - 将 Google map 自定义叠加层与主干 View 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102762/

相关文章:

javascript - 我如何请求 Google Place API 返回地点的 ID?

javascript - 调用方法时位置 X [object Object]' 的值无效:[nsIDOMEventListener::handleEvent]

javascript - 下划线 _.throttle 如果在超时内发生模糊则忽略输入

node.js - 尝试在多维数组中使用 .sortBy

javascript - 如何使下划线模板相互交互?

javascript - 将垂直滚动条添加到 Google map 侧边栏

javascript - 谷歌地图 - 多边形编辑 - 标记顶点

javascript - Backbone 包括在头部?

javascript - 如何为背景网格实现每行删除

backbone.js - 监听器绑定(bind)到模型属性未触发