2013-01-14 10 views
5

Próbuję odtworzyć przykład wizualizacji amerykańskiego bezrobocia autorstwa jVectorMap. Wziąłem kod prosto z github. Mapa nie zostanie załadowana, a konsola podaje mi ten błąd: "jvm nie jest zdefiniowany".Błąd jVectorMap: "jvm nie jest zdefiniowany"

Oto kod:

<!DOCTYPE html> 
    <html> 
    <head> 
     <meta charset="utf-8"/> 
     <title>Maps</title> 
     <link rel="stylesheet" media="all" href="../jvectormap/jquery-jvectormap.css"/> 
     <link rel="stylesheet" media="all" href="css/jquery-ui-1.8.21.custom.css"/> 
     <script src="../jvectormap/tests/assets/jquery-1.8.2.js"></script> 
     <script src="../jquery-jvectormap.js"></script> 
     <script src="../jvectormap/tests/assets/jquery-jvectormap-us-aea-en.js"></script> 
     <script src="jquery-ui-1.8.21.custom.min.js"></script> 

    <script> 
    $(function(){ 
     $.getJSON('data.json', function(data){ 
     var val = 2009; 
      statesValues = jvm.values.apply({}, jvm.values(data.states)), 
      metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), 
      metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); 

     $('.map').vectorMap({ 
      map: 'us_aea_en', 
      markers: data.metro.coords, 
      series: { 
      markers: [{ 
       attribute: 'fill', 
       scale: ['#FEE5D9', '#A50F15'], 
       values: data.metro.unemployment[val], 
       min: jvm.min(metroUnemplValues), 
       max: jvm.max(metroUnemplValues) 
      },{ 
       attribute: 'r', 
       scale: [5, 20], 
       values: data.metro.population[val], 
       min: jvm.min(metroPopValues), 
       max: jvm.max(metroPopValues) 
      }], 
      regions: [{ 
       scale: ['#DEEBF7', '#08519C'], 
       attribute: 'fill', 
       values: data.states[val], 
       min: jvm.min(statesValues), 
       max: jvm.max(statesValues) 
      }] 
      }, 
      onMarkerLabelShow: function(event, label, index){ 
      label.html(
       '<b>'+data.metro.names[index]+'</b><br/>'+ 
       '<b>Population: </b>'+data.metro.population[val][index]+'</br>'+ 
       '<b>Unemployment rate: </b>'+data.metro.unemployment[val][index]+'%' 
      ); 
      }, 
      onRegionLabelShow: function(event, label, code){ 
      label.html(
       '<b>'+label.html()+'</b></br>'+ 
       '<b>Unemployment rate: </b>'+data.states[val][code]+'%' 
      ); 
      } 
     }); 

     var mapObject = $('.map').vectorMap('get', 'mapObject'); 

     $(".slider").slider({ 
      value: val, 
      min: 2005, 
      max: 2009, 
      step: 1, 
      slide: function(event, ui) { 
      val = ui.value; 
      mapObject.series.regions[0].setValues(data.states[ui.value]); 
      mapObject.series.markers[0].setValues(data.metro.unemployment[ui.value]); 
      mapObject.series.markers[1].setValues(data.metro.population[ui.value]); 
      } 
     }); 
     }); 
    }) 
    </script> 
</head> 
<body> 
    <div class="map" style="width: 800px; height: 600px"></div> 
    <div class="slider" style="width: 280px; margin: 10px"></div> 
</body> 
</html> 

Odpowiedz

-2

Donno dużo o jVectorMap ale prostej obserwacji.

W kodzie zmienna "jvm" nie jest nigdzie zdefiniowana. Czy nie byłoby dobrze sprawdzić pliki JS używane w kodzie i zwrócić uwagę na jakąkolwiek inicjalizację zmiennej "jvm"?

0

Deklaracje zmiennych powinny być ich własnymi instrukcjami zakończonymi na ;. Obecnie kończysz linie z ,.

var val = 2009; 
var statesValues = jvm.values.apply({}, jvm.values(data.states)); 
var metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)); 
var metroUnemplValues = Array.prototype.concat([], jvm.values(data.metro.unemployment)); 
+0

Dzięki za sugestię, wprowadziłem zmianę, ale nie pomogło to w błędzie! – rdmirza

+0

również sprawdź, czy ścieżki do plików zasobów są poprawne i czy zostały pomyślnie załadowane. –

4

Używamy niesklasyfikowanego pliku js. Zawiera tylko główny kod bez bibliotek.

Aby naprawić ten błąd, masz 2 rozwiązania:

  1. dodać wszystkie potrzebne biblioteki. Można go znaleźć w katalogu lib/. Przykład z plikami i kolejność, którą należy dodać, można znaleźć w tests/index.html plik

  2. Utwórz min min. Musisz użyć systemu NIX i wykonać ./build.sh. Być może trzeba będzie zainstalować uglifyjs utility, na przykład można install npm from here a następnie wykonać npm install [email protected]

+1

Uruchomienie 'build.sh' pracowało dla mnie –

+0

Oh geez, dlaczego nie mają tego na swojej stronie internetowej? Czy uważają, że jest to powszechna wiedza? –

16

miałem dokładnie ten sam problem. Problem jest plik ZIP, który został pobrany przekierowuje do

<script src="../jquery-jvectormap.js"></script> 

Czy rzeczywiście plik JS które powołuje JVM, a nie rzeczywistymi bibliotekę JVM (dlatego się, że w „JVM nie jest zdefiniowane” błąd.

sposób Naprawiłem to było wziąć plik

http://jvectormap.com/js/jquery-jvectormap-1.2.2.min.js 

i umieścić go w moim projekcie.

to rzeczywista bibliotekę JVM, tak długo, jak to jest includ ed przed wywołaniem jakichkolwiek wywołań .vectorMap, będzie to dla ciebie idealne rozwiązanie.

+0

Ta odpowiedź naprawdę mi nie pomogła, ale kupiłem motyw (Color Admin), który dostarcza inną wersję jvectormap, którą chciałem dołączyć (ostatnie otwarte źródło), os mam ten błąd, w takim przypadku użyj dostarczonego wersja. – Loenix

+0

Używałem pliku js z Cloudflare CDN dla biblioteki jvactormap wersji 2.0.4, nie działa. Zastąpiłem go wymienionym wyżej lokalnym plikiem js w wersji 1.2.2 i działało. Mapa nie może znaleźć jvm w bibliotece 2.0.4 z jakiegoś powodu. – echology

1

Wygląda na to, że zminiony plik zawiera wszystkie potrzebne pliki, podczas gdy jquery-jvectormap.js nie. Jeśli więc chcesz używać wersji niemineralizowanej, powinieneś być przygotowany do ręcznego załadowania wszystkich różnych plików wymaganych przez jquery-jvectormap.js, na przykład map.js, vector-canvas.js, e.t.c. Można je znaleźć w katalogu /src, jeśli otrzymasz pliki od the jvector maps website

Powiązane problemy