TL定義疊加; DR混合谷歌地圖與骨幹網訪問量
是PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
「正確」的方式有了主心骨查看從另一個「類」繼承?
龍閱讀
我們重做使用主幹我們的網站和包括一些映射功能正在工作。
我有一個Backbone視圖,用於處理將<div>
s放置到瀏覽器窗口中的特定點上;這似乎是一個很自然的事情,爲了讓Google的Map API把它們放在地理座標上。
根據Google API,爲了生成自定義覆蓋圖,您需要創建一個新對象並將該對象的原型設置爲google.maps.OverlayView的新實例。然後,您可以實現對物體的前三大功能,使對象響應:
onAdd
draw
onRemove
哪裏onAdd
負責生成HTML,然後將它放到最上面的地圖。隨後調用draw
,根據LatLng對和您提供的邊界正確定位元素。 onRemove
當你想擺脫你的圖層時被調用。
所以我修改了我的視圖以包含這三個方法(它們只是調用render和unrender並綁定到我的集合)。然後讓「魔術發生」我做:
PinView.prototype = _.extend(PinView.prototype, google.maps.OverlayView.prototype)
這是否正確?我可以發佈視圖和它所基於的模型的代碼,但老實說,它們與這個例子無關 - 代碼可以工作,我可以將通過Backbone模型,視圖和控制器組件生成的自定義div
在地圖上沒有問題,我問我猜(也許這個問題更適合程序員。所以讓我知道,我會移動它)。
這似乎是使我的PinView既是一個Backbone View又是一個Google Maps OverlayView的最簡單的方法,但我並不是100%滿意於原型繼承來知道我是在做一些「錯誤的」在路的某個地方。
嗯,它可能實際上是乾淨的PinView作爲BackboneView與谷歌地圖OverlayView作爲PinView的一個屬性鏈接到該覆蓋層不知道有關谷歌內部的類,因爲它們有點被所有縮小模糊 - 但我想我寧願避免混合這兩個,因爲它們是不同類型的類和誰 知道會發生什麼(儘管如果它有效,請告訴我們!)。一些我完全喜歡嘗試玩更多 - 如果我只有時間呃! – 2012-02-03 12:38:46
它正在工作,我想我的問題更多的是「你是如何使用原型繼承進行多重繼承」而不是「我應該真的這麼做嗎?」骨幹的東西是超級乾淨的,所以我不擔心某種原型命名空間衝突,並且當谷歌的源代碼被縮小,當你在調試器中玩它的時候,OverlayView()的原型,對象實際上也非常簡單。 – tkone 2012-02-03 12:49:35