2016-02-12 44 views
0

我創建了一個Joomla組件,並且我在組件窗口中有一個Leaflet地圖。 我用Omnivore插件的Leaflet將GPX和KML添加到我的地圖中,並使用Leaflet控件允許添加和刪除圖層。傳單控制Joomla問題

我在一個乾淨的Joomla發展的安裝測試的控件和控件都OK,作爲第一個圖像 enter image description here

在看到我在我的Joomla網站澈控制使用分量也不行,有是在第二個數字中看到的一些髒條目 enter image description here

我認爲這是因爲模板和一些干擾Leaflet的腳本,但我無法修復它。 joomla版本是相同的,模板不,joomla網站使用龍門。 這是我用來填充地圖功能:

function showRouteTracks(tracce, baseURI, popup=false, enableLayers=true, enableElevation=false){ 
var layerControl = new Array(); 
for (var i = 0; i < tracce.length; i++) { 

    var customLayer = L.geoJson(null, { 
     style: getStyle(i) 
    }); 

    if(tracce[i][3]=='GPX'){ 
     var layer = omnivore.gpx(baseURI+tracce[i][2], null, customLayer).on('ready', function() { 
       elevation(enableElevation,layer); 
      }); 
     if(popup){ 
      link='<a href="'+tracce[i][4]+'">'+tracce[i][5]+'</a>' 
      layer.bindPopup(tracce[i][0]+"&#10141;"+tracce[i][1]+"<br/>"+link); 
     } 
     lvrtMap.addLayer(layer); 
     layerControl[tracce[i][0]+"&#10141;"+tracce[i][1]]=layer; 
    } 
    if(tracce[i][3]=='KML'){ 
     var layer = omnivore.kml(baseURI+tracce[i][2], null, customLayer).on('ready', function() { 
      elevation(enableElevation,layer); 
     }); 
     if(popup){ 
      link='<a href="'+tracce[i][4]+'">'+tracce[i][5]+'</a>' 
      layer.bindPopup(tracce[i][0]+"&#10141;"+tracce[i][1]+"<br/>"+link); 
     } 
     lvrtMap.addLayer(layer); 
     layerControl[tracce[i][0]+"&#10141;"+tracce[i][1]]=layer; 
    } 
} 

if(!enableLayers) 
    layerControl=null; 
if(enableElevation) 
    L.control.layers(lvrtMapLayers,layerControl,{'position':'bottomright'}).addTo(lvrtMap); 
else 
    L.control.layers(lvrtMapLayers,layerControl).addTo(lvrtMap); 

}

回答

1

目前正在創建一個數組來存儲標題/層項目:

var layerControl = new Array(); 

L.Control.Layers需要對象文字作爲底層/覆蓋參數:

var baseLayers = { 
    "Mapbox": mapbox, 
    "OpenStreetMap": osm 
}; 

var overlays = { 
    "Marker": marker, 
    "Roads": roadsLayer 
}; 

L.control.layers(baseLayers, overlays).addTo(map); 

S啊,你應該使用對象文本:

layerControl['MyTitle'] = myLayerInstance; 

我敢打賭,你不會有任何問題,那麼:

var layerControl = {}; 

像之前您可以添加項目以同樣的方式。現在發生的事情是,你試圖將字符串鍵分配給數組中的項目,這是不受支持的(甚至應該工作,但不在此列)。一個JavaScript數組只能有數字鍵而沒有別的。

它適用於你乾淨的安裝,而不是在你的生產設置是可能在生產中你有一個JavaScript庫/框架加載的方法/屬性添加到JavaScript的本地數組原型,他們是可枚舉的。因此,當layercontrol實例迭代數組時,它也會發現這些額外的方法/屬性,並嘗試將它們添加到layercontrol。

只要使用對象文字:{}而不是Array,你會好的,祝你好運。

編輯:好奇,做了一些挖掘。事實證明,這是由Mootools引起的,然後我遇到了這個問題:Looping through empty javascript array returns array object functions它給出了一些解釋和一些其他解決方案,但最好是如果你只是使用對象文字,因爲此刻你有點濫用數組。

+0

它的工作原理,謝謝 – user5919369

+0

絕對不需要謝謝,這是Stackoverflow的意思。但是,您可以考慮將答案標記爲已接受,以便其他具有類似問題的用戶也可以找到工作/接受的解決方案。請參閱:http://stackoverflow.com/help/someone-answers – iH8