2013-08-11 37 views
5

Tôi đang cố gắng mở rộng lớp Marker của tờ rơi để tạo điểm đánh dấu vị trí. Điểm đánh dấu vị trí của tôi bao gồm một vòng tròn bên trong đại diện cho vị trí của người dùng và một vòng tròn bên ngoài thể hiện độ chính xác của vị trí người dùng. Tôi đang mở rộng lớp vì tôi muốn hiển thị nhiều vị trí người dùng và tôi không muốn phải tạo 2 điểm đánh dấu cho mỗi người dùng.Rắc rối w/popup khi mở rộng tờ rơi Marker

Tôi gặp sự cố khi cửa sổ bật lên hoạt động. Hai điều:

  1. cửa sổ bật lên không hoạt động, tức là không bao giờ xuất hiện.
  2. tôi có thể ràng buộc popup để chỉ (vị trí người sử dụng) vòng tròn bên trong, và không phải là vòng tròn bên ngoài (chính xác)

Đây là một nặng nề, đánh dấu màu xanh là vòng tròn tiêu chuẩn với popup, màu xanh lá cây là dấu hiệu mở rộng của tôi , cửa sổ bật lên không hoạt động. http://plnkr.co/edit/5tz538?p=preview

mã:

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); 
}; 

Trả lời

3

Got nó. Tôi đã phải ghi đè lên các phương thức popup để chỉ xử lý 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

Các vấn đề liên quan