tko*_*one 6 google-maps-api-3 prototypal-inheritance backbone.js underscore.js
TL; DR
是PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)"适当"的方式拥有其他"类"骨干查看继承?
长读
我们正在使用Backbone重做我们的网站,并正在努力包括一些映射功能.
我有一个Backbone视图,处理将<div>s 放置在浏览器窗口中的特定点上; 这似乎是一个自然的事情,以便谷歌的Map API将它们放置在地理坐标上.
根据Google API,为了生成自定义叠加层,您需要创建一个新对象,并将该对象的原型设置为google.maps.OverlayView的新实例.然后,在该对象之上实现三个函数,以便对象响应:
onAdd
draw
onRemove
哪里onAdd负责生成HTML,然后在地图上应用它.这随后调用draw根据您提供的LatLng对和边界正确定位元素.onRemove当你想要摆脱你的图层时会被调用.
所以我修改了我的View以包含这三个方法(只调用render和unrender并绑定到我的集合).然后让我正在做的"魔术发生":
PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
这看起来不错吗?我可以发布它所基于的View和Model的代码,但老实说,它们与这个例子无关 - 代码可以工作,我可以div通过Backbone模型,视图和控制器组件生成自定义s没有问题的地图,我猜的是什么(也许这个问题对于programmers.se更合适,所以让我知道,我会移动它).
这似乎是让我的PinView同时成为Backbone View和Google Maps OverlayView的最简单方法,但我对原型继承不是100%感到满意,因为我知道我是在做某些"错误"或在某个地方破坏某些东西.
好主意!我通常对天气有点怀疑,当事情正常时,你是“正确的”,所以如果你没有遇到阻碍并且覆盖层出现并做了应该做的事情,我会说你是。
不过,需要仔细检查一件事:
这不是(也不可能)是“真正的”多重继承 - 这个概念在基于原型的语言中并不真正相关:方法的一个实现将不可避免地“获胜”并覆盖另一个实现,至少在使用时_.extend()
这意味着,如果存在同名的成员或方法Backbone.View,则调用中最后google.maps.OverlayView一个将接管。但当我使用 Chrome 的开发者工具检查它们时,我没有看到任何明显的此类冲突。_.extend()
所以我的建议:继续使用这个,只是进行大量测试。我希望有一天能看到这种技术的示例。
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |