2010-12-09 3 views
1

Я нашел большой учебник для расширения GMarkers в карты v2 Google: http://www.googlemapsbook.com/2007/01/22/extending-gmarker/Расширение google.maps.Marker

К сожалению, в v3 набор вверх маркера сильно отличается (например, вы должны пройти на карте он будет добавлен в качестве параметра, поэтому не может быть автономным объектом google.maps.Marker действовать как прототип или, по крайней мере, только после того, как ваша карта будет инициализирована).

Кто-нибудь знает, как расширить маркер google maps v3?

* edit - оказывается, я ошибался в отношении того, что карта является обязательным параметром. Я отправлю свое расширение v3 как ответ позже и пометьте это как вопрос сообщества

ответ

1

Ниже приводится то, что я в конечном итоге использовал (я удалил много кода, который я использовал для своего пользовательского маркера, чтобы оставить только голый кости, поэтому я, возможно, ошибся в редактировании). newObj() - это функция (основанная на коде Douglas Crockford) для создания нового объекта из прототипа, вместо использования функции-конструктора.

function newObj(o) { 
    var params = Array.prototype.slice.call(arguments,1); 
    function F() {} 
    F.prototype = o; 
    var obj = new F(); 
    if(params.length) { 
     obj.init.apply(obj,params); 
    } 
    return obj; 
} 

var MyMarkerProto = function() { 
    var proto = new google.maps.Marker(new google.maps.LatLng(0, 0)); 

    proto.init = function (data) { 
     this.setPosition(new google.maps.LatLng(parseFloat(data.lat), parseFloat(data.lng))); 
    } 
    return proto; 

}(); 

var myMarker = newObj(MyMarkerProto, { 
    lat: 51, 
    lng: 48, 
    otherData: "some other value" 
});