2017-06-28 5 views
0

Ich habe eine Karte erstellt und Marker in Salesforce Lightning Komponente, Problem ist: klicken Sie auf Marker >> Klicken Sie auf die Karte (das Popup zu schließen) >> vergrößern und verkleinern> > Dieser Fehler für jeden Zoomschritt angezeigt:Leaflet Fehler beim Zoomen nach Popup schließen

({ 
     drawMap: function(component,map){ 

       var mapElement = component.find("map").getElement(); 
       map = L.map(mapElement).setView([35.232, 40.5656], 12); 
     L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', 
       { 
        attribution: 'Tiles © Esri' 
       }).addTo(map); 

      var markers = L.marker([35.232, 40.5656]).addTo(map); 

       component.set("v.map", map); 
      component.set("v.markers", markers); 

     }, 

     putMarkers: function(component) { 
      var map = component.get('v.map'); 
      var markers = component.get('v.markers'); 
      var projects = component.get('v.projects'); 
      var projectsAction = component.get("c.getProjectsList"); 
      var markerArray = [];     
      var symbol; 
var symbol1 = 'symbolURl';   
var symbol2 = 'symbolURl'; 

      projectsAction.setCallback(this, function(response) { 
       var state = response.getState(); 
       if(state == "SUCCESS"){ 
        projects = response.getReturnValue(); 

         if (markers) { 
       markers.remove(); 
      } 
      // Add Markers 
      if (map && projects && projects.length> 0) {    
       for (var i=0; i<projects.length; i++) { 
        var project = projects[i]; 
        if (project.Latitude && project.Longitude) { 
         var latLng = [project.Latitude, project.Longitude]; 
         var currentStatus = project.status; 
          if(currentStatus=="status1") 
         symbol = symbol1; 

         else if(currentStatus=="status2") 
         symbol = symbol2; 

         var popupTemplate = '<b style="color:black; font-size:11px;">Project Name:</b><span style="float:right;margin-right:10px;color:#800000;font-size:11px;width:110px;text-align:right; white-space:normal;" > '+project.name; 

        var icon = new L.DivIcon({ 
         className:'', 
         html: '<img style="width:34px;height:37px;" src="'+symbol+'"/>'+ 
         '<span style="font-weight:bold;font-size:9pt;">text</span>' 
            }); 

         var marker = L.marker(latLng, {project: project,icon:icon,title:project.name}).bindPopup(popupTemplate,{minWidth:200}); 
         markerArray.push(marker); 


        } 
       } 
       L.layerGroup(markerArray).addTo(map); 

       component.set("v.map", map); 
      }} 
       else if(state == "ERROR"){ 
        console.log('Error in calling server side action'); 
       } 
      }); 

      $A.enqueueAction(projectsAction); 
     } 

und in JavaScript-Controller:

Uncaught TypeError: Cannot read property '_latLngToNewLayerPoint' of null throws at /resource/1498411629000/leaflet/leaflet.js:9:10763

dies der Code in JavaScript-Komponente helper ist

jsLoaded: function(component, event, helper) { 
    var map = component.get("v.map"); 
     if (!map) { 
     helper.drawMap(component,map); 
     helper.putMarkers(component); 
     } 
}, 
    projectsChangeHandler: function(component, event, helper) { 
    helper.putMarkers(component); 
} 

wo ist das Problem? bitte helfen

Antwort

0

Ich löste es durch die leaflet.js Datei bearbeiten: Suche nach dem Wort (_latLngToNewLayerPoint) und den Code mit der Bedingung, wickeln:

if(this._map) 

also, wenn _map null ist, überspringen

Ich weiß nicht, warum dieser Fehler nur in Salesforce

dargestellt wird
Verwandte Themen