Расширение google.maps.Marker

Я нашел отличное руководство по расширению GMarkers в картах Google v2: http://www.googlemapsbook.com/2007/01/22/extending-gmarker/

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

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

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


person wheresrhys    schedule 09.12.2010    source источник


Ответы (1)


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

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"
});
person wheresrhys    schedule 20.04.2011