2013-08-11 9 views
5

Próbuję rozszerzyć klasę znaczników Ulotki, aby utworzyć znacznik położenia. Mój znacznik lokalizacji składa się z wewnętrznego okręgu, który reprezentuje lokalizację użytkownika i zewnętrzny okrąg, który przedstawia dokładność lokalizacji użytkownika. Rozszerzam klasę tak, jak chcę pokazywać wiele lokalizacji użytkowników i nie chcę tworzyć 2 znaczników dla każdego użytkownika.Kłopoty z wyskakującymi okienkami po rozwinięciu ulotki Znacznik

Mam problemy z uruchomieniem popup. Dwie rzeczy:

  1. popup nie działa, tzn. Nigdy się nie wyświetla.
  2. mogę powiązać popup tylko (lokalizacja użytkowników) wewnętrzny krąg, a nie okrąg (dokładność)

Oto upadać, niebieski znacznik jest standardowe koło z popup, zielony to mój rozszerzony znacznik popup nie działa. Kod http://plnkr.co/edit/5tz538?p=preview

:

L.LocationMarker = L.Marker.extend({ 
    initialize: function (latlng, options) { 
    L.Marker.prototype.initialize.call(this, latlng); 

    this._accuracyCircle = L.circle(latlng, 0, { 
     color: options.color, 
     fillColor: options.color, 
     fillOpacity: 0.15, 
     weight: 2, 
     opacity: 0.5 
    }); 

    this._locationMarker = L.circleMarker(latlng, { 
     color: options.color, 
     fillColor: options.color, 
     fillOpacity: 0.7, 
     weight: 2, 
     opacity: 0.9, 
     radius: 5 
    }); 

    this._location = L.layerGroup([this._accuracyCircle, this._locationMarker]); 
    }, 

    addTo: function (map) { 
    map.addLayer(this._location); 
    return this; 
    }, 

    onAdd: function (map) { 
    this._map = map; 
    map.addLayer(this._location); 
    }, 

    onRemove: function (map) { 
    map.removeLayer(this._location); 
    }, 

    getLatLng: function() { 
    return this._locationMarker.getLatLng(); 
    }, 

    setLatLng: function (latlng) { 
    this._accuracyCircle.setLatLng(latlng); 
    this._locationMarker.setLatLng(latlng); 
    return this; 
    }, 

    setAccuracy: function (accuracy) { 
    this._accuracyCircle.setRadius(accuracy ? accuracy : 0); 
    return this; 
    } 
}); 

L.locationMarker = function (latlng, options) { 
    return new L.LocationMarker(latlng, options); 
}; 

Odpowiedz

3

Rozumiem. Musiałem zastąpić wyskakujące metody, aby obsłużyć tylko obiekt locationMarker.

bindPopup: function (content, options) { 
this._locationMarker.bindPopup(content, options); 
    return this; 
}, 

setPopupContent: function (content) { 
this._locationMarker.setPopupContent(content); 
    return this; 
}, 

unbindPopup: function() { 
this._locationMarker.unbindPopup(); 
    return this; 
}, 

_movePopup: function (e) { 
this._locationMarker.setLatLng(e.latlng); 
} 

Plunker: http://plnkr.co/edit/5tz538?p=preview

Powiązane problemy