我現在正在構建自定義Knockout.js綁定來處理多邊形的繪製。在這種情況下,Knockout API只給我一個DOM對象的引用來訪問我需要更新的任何東西。但是,它看起來像設計leaflet.js希望用戶將地圖實例存儲在其實現中。我沒有這個選擇。如何僅使用DOM對象獲得leaflet.js實例?
嘗試這給了我一個錯誤:var existingMap = L.map('aMapIDGoesHere')
和錯誤是:map already initialized
。
任何方式我可以使用DOM元素或元素ID來訪問地圖實例?
通過請求這裏的自定義綁定,請注意這是一項正在進行的工作:
ko.bindingHandlers.leafletDraw = {
init: function(element, valueAccessor, allBindingsAccessor) {
var map = L.map(element).setView([40, -90], 3);
var tiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: 'OSM',
minZoom: 2
}).addTo(map);
// Initialise the FeatureGroup to store editable layers
var editableLayers = new L.FeatureGroup();
map.addLayer(editableLayers);
// Initialise the draw control and pass it the FeatureGroup of editable layers
var drawOptions = {
edit: {
featureGroup: editableLayers,
remove: false
},
draw: {
polyline: false,
circle: false,
marker: false,
polygon: {
allowIntersection: false,
showArea: true
}
}
}
var drawControl = new L.Control.Draw(drawOptions);
map.addControl(drawControl);
// when a shape is first created
map.on('draw:created', function (e) {
var shapeString = $.map(e.layer._latlngs, function(pair) { return pair.lng.toString()+"::"+pair.lat.toString(); }).join(";;;");
var value = valueAccessor();
if (ko.isObservable(value)) {
value(shapeString);
}
editableLayers.addLayer(e.layer);
drawControl.removeFrom(map);
drawOptions.draw.polygon = false;
drawOptions.draw.rectangle = false;
var editControl = new L.Control.Draw(drawOptions);
map.addControl(editControl);
});
// handle when a shape is edited
map.on('draw:edited', function (e) {
var editedLayer = e.layers._layers[Object.keys(e.layers._layers)[0]];
var shapeString = $.map(editedLayer._latlngs, function(pair) { return pair.lng.toString()+"::"+pair.lat.toString(); }).join(";;;");
var value = valueAccessor();
if (ko.isObservable(value)) {
value(shapeString);
}
});
},
update: function(element, valueAccessor) {
// need to figure this out since we can't access leaflet params from
}
};
特別注意你會發現,我轉換點進去一個連接字符串。這是暫時需要的。
你可以添加你的代碼嗎? –
@ leszek.hanusz完成。代碼重要的部分在底部的'update'屬性下。沒有辦法只使用'element'來獲取地圖實例。 – crockpotveggies