2013-08-11 2 views
5

Я пытаюсь расширить класс маркера для создания маркера местоположения. Мой маркер местоположения состоит из внутреннего круга, который представляет местоположение пользователя и внешний круг, который представляет точность местоположения пользователя. Я расширяю класс, поскольку хочу показать множество мест пользователей, и я не хочу создавать 2 маркера для каждого пользователя.Проблема с всплывающим окном при расширении прокладок Маркер

У меня возникли проблемы с получением всплывающего окна. Две вещи:

  1. всплывающее окно не работает, т. Е. Никогда не появляется.
  2. можно связать всплывающее только (местоположение пользователей) внутренний круг, а не внешний круг (точность)

Вот звенеть, синий маркер стандартный круг всплывающего окна, зеленый мой расширенный маркер , всплывающее окно не работает. 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); 
}; 

ответ

3

Понял. Мне пришлось переопределить всплывающие методы, чтобы обрабатывать только расположениеМаркер.

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

Смежные вопросы