2012-03-09 35 views
6

Tôi đang làm việc với Wax với Leaflet. Tôi đang thiết lập một bản đồ của Hoa Kỳ, vẽ ranh giới tiểu bang với GeoJSON bằng cách sử dụng L.GeoJSON của tờ rơi.Làm cách nào để cập nhật nội dung trong cửa sổ bật lên Leaflet?

Tôi có thể tải mọi thứ trong khi tải bản đồ, nhưng tôi cần có thể điều chỉnh nội dung trong cửa sổ bật lên sau khi bản đồ được vẽ. Dưới đây là một phiên bản rút gọn của những gì tôi đang làm:

var gjStates = new L.GeoJSON(null, null); 
wax.tilejson(url, function(tilejson) { 
    map = new L.Map('map').addLayer(new wax.leaf.connector(tilejson)).addLayer(gjStates); 

    gjStates.on("featureparse", function (e) { 
     if (e.properties && e.properties.name){ 
      pops[e.id.substring(4)] = e.layer.bindPopup('<h4>Hello ' + e.properties.name + '!</h4>'); 
     } 
    }); 
    for (s in usStateData) { 
     gjStates.addGeoJSON(usStateData[s]); 
    } 
}); 

Bây giờ, mọi thứ đều tốt, cửa sổ bật lên có conent tốt, nhưng sau đó tôi muốn thay đổi nó sau và không có cách nào để tham chiếu. Tôi thấy trong nguồn bindPopup() trả về 'this', mà tôi nghĩ là đối tượng L.Popup, nhưng đã kết thúc một cái gì đó khác. Vì vậy, ví dụ, các mã sau đây sẽ udpate popup đang hoạt động, không phải là một cụ thể cho các đối tượng cụ thể L.Path (nhà nước) Tôi đang cố gắng để có được tại.

pops['AK']._map._popup.setContent('I am ALASKA!'); 

Đào qua DOM bằng firebug, tôi cũng có thể thấy nội dung bật lên được đặt trong biến nội bộ và tôi có thể cập nhật. Tuy nhiên, cập nhật điều này không cập nhật HTML, và không có cách nào để tôi tìm ra rằng Alaska có khóa là 52. _layers [52] cũng không có phương thức setContent() mà tôi hy vọng nếu nó là L .Popup đối tượng.

gjStates._layers[52]._popupContent = 'I am ALASKA!'; 

Vì vậy, tôi thấy khó khăn và không tìm thấy những gì tôi cần. Có cách nào để tôi tham khảo và cập nhật nội dung, một cửa sổ bật lên cụ thể trên bản đồ sau khi hiển thị ban đầu không?

+0

Tinh chỉnh câu trả lời này có thể phù hợp với bạn: http://stackoverflow.com/a/12712987/1224449. – araichev

+0

Đối với những người khác có vấn đề này, điều này có thể giúp http://stackoverflow.com/questions/34504816/leafletjs-how-to-get-a-handle-to-the-active-pop-marker – Brandan

Trả lời

1

Tôi khá chắc chắn bạn chỉ có thể giữ tham chiếu đến tất cả các lớp và sau đó gọi layer.bindPopup() sau đó để thay đổi nội dung bật lên.

+0

Lớp nào? gjStates? Điều đó nhập tất cả nội dung trạng thái khác nhau và tôi chỉ muốn thay đổi nội dung bật lên trên từng đối tượng trên lớp đó. –

+0

'e.layer' trong trình xử lý sự kiện đặc biệt – Acorn

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