2016-07-04 7 views
2

Ich verwende JVectorMap, um einige Besuchsdaten über eine Karte anzuzeigen. Dies ist der Code.JVectorMap Drill-Down färbt Regionen nicht ein, wenn sich Skalierung oder Werte nach dem Klicken auf ein Land ändern

var euroMap = new jvm.MultiMap({ 
 
     container: $('#map'), 
 
     regionsSelectable: true, 
 
    regionsSelectableOne: true, 
 
     maxLevel: 1, 
 
     main: { 
 
     map: 'europe_mill', 
 
     backgroundColor: 'transparent', 
 
     regionStyle: { 
 
      initial: { 
 
      fill: 'white', 
 
      "fill-opacity": 1, 
 
      stroke: '#000', 
 
      "stroke-width": 0.3, 
 
      "stroke-opacity": 1 
 
      }, 
 
     }, 
 
     series: { 
 
      regions: [{ 
 
      scale: ['#FFFFFF', '#DB715C'], 
 
      values: gon.map_data['ptps'], 
 
      normalizeFunction: 'polynomial' 
 
      }] 
 
     }, 
 
     onRegionTipShow: function(event, label, index){ 
 
      label.html(
 
      '<b>'+label.html()+'</b></br>'+ 
 
      '<b>#{t 'navbar.views'}: </b>'+(gon.map_data['views'][index]==undefined ? "0" : gon.map_data['views'][index])+'</b></br>'+ 
 
      '<b>#{t 'navbar.ptps'}: </b>'+(gon.map_data['ptps'][index]==undefined ? "0" : gon.map_data['ptps'][index])+'</b></br>'+ 
 
      '<b>#{t 'navbar.payments'}: </b>'+(gon.map_data['payments'][index]==undefined ? "0" : gon.map_data['payments'][index])+'</b></br>'+ 
 
      '<b>Payed/Viewed: </b>'+(gon.map_data['v_p_ratio'][index]==undefined ? "0" : gon.map_data['v_p_ratio'][index])+'%<br/>'+ 
 
      '<b>Negotiated/Viewed: </b>'+(gon.map_data['v_n_ratio'][index]==undefined ? "0" : gon.map_data['v_n_ratio'][index])+'%<br/>'+ 
 
      '<b>Payed/Negotiated: </b>'+(gon.map_data['n_p_ratio'][index]==undefined ? "0" : gon.map_data['n_p_ratio'][index])+'%<br/>' 
 
     ); 
 
     }, 
 
     onViewportChange: function(event, scale) {}, 
 
     onRegionOver: function(event, code) {}, 
 
     onRegionClick: function(event, code) {} 
 
     }, 
 
     mapUrlByCode: function(code, multiMap){ 
 
     return '/assets/maps/'+code.toLowerCase()+'_'+multiMap.defaultProjection+'.js'; 
 
     } 
 
    });

Was passiert, wenn das passiert, ich ein Drop-Down-Taste haben, die diesen Code ausgeführt wird (Coffee):

$('.map_selector').click (event) -> 
 
     event.preventDefault() 
 
     map = $('#map .jvectormap-container').data('mapObject') 
 
     map.series.regions[0].clear() 
 
     
 
     map.series.regions[0].setValues(gon.map_data[event.currentTarget.dataset.filter]) 
 
     map.series.regions[0].setScale(['#FFFFFF', '#DB715C'])

Und es soll die Karte zurücksetzen skalieren und Werte und färben Sie die Karte wieder basierend auf den neuen Daten.

Die Basiskarte ist die Karte von Europa, und während der Arbeit in dieser Karte, alles funktioniert gut, wenn ich den map_selector ändern, ändern sich alle Kartenfarben wieder abhängig von den neuen Werten, aber wenn ich auf ein Land klicke die Daten der Region sehen, funktioniert nicht, die Regionen behalten die gleiche Farbe, egal wie oft ich de map_selector ändere.

Weiß jemand, warum?

Vielen Dank im Voraus

Antwort

0

Zu guter Letzt muss ich konnte dieses Problem zu lösen, indem eine neue Instanz der Karte, jedes Mal zu schaffen die Werte geändert, denn in einem Drill-Down Karte jedes Mal wenn Sie die Werte ändern sie die allgemeine Karte beeinflusst in meinem Fall Europa, betrifft jedoch nicht die Teilregionen.

Also, statt diesem

map.series.regions[0].setValues

Sie haben eine neue Instanz der Karte zu erzeugen, um die Werte neu geladen und die Drill-Down-Regionen korrekt ausgefüllt werden.