jVectorMap错误:“jvm未定义”
我正在尝试重新创建美国失业的jVectorMap示例可视化。 我直接从github上获取了代码。 地图,不会加载,控制台给我这个错误:“jvm没有定义。”
这是代码:
Maps $(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( ''+data.metro.names[index]+'
'+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+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]); } }); }); })
我有同样的问题。 问题是您下载的ZIP文件会将您重定向到
实际上是一个调用JVM的JS文件,而不是实际的JVM库(这就是为什么你得到“JVM未定义”错误。
我修复它的方法是获取文件
http://jvectormap.com/js/jquery-jvectormap-1.2.2.min.js
并将其包含在我的项目中。
这就是ACTUAL JVM库,所以只要在你进行任何.vectorMap调用之前包含它,它就会很有用。
所以你使用的不是缩小的js文件。 它只包含没有库的主代码。
要解决此错误,您有两个解决方案:
-
添加所有需要的库。 你可以在
lib/
目录中找到它。 有关文件的示例以及您需要添加的命令,您可以在tests/index.html
文件中找到它 -
创建缩小的js。 您需要使用NIX系统并执行
./build.sh
。 也许你需要安装uglifyjs实用程序 ,例如你可以从这里安装npm然后执行npm install uglify-js@1
看起来缩小的文件包含jquery-jvectormap.js
不需要的所有各种文件。 因此,如果您想使用非缩小版本,那么您应该准备手动加载jquery-jvectormap.js
所需的所有各种文件,例如map.js
, vector-canvas.js
等。这些可以在/src
找到目录,如果您从jvector地图网站获取文件
statesValues
, metroPopValues
和metroUnempValues
变量声明应该是自己的语句终止于;
。 您目前以a,。结尾。
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));
如果您仍希望在本地保存正确的文件,例如,如果您正在使用bower,那么您也可以在GitHub上使用此“内置”版本的jvectormap 。
如果您下载了zip或从GitHub克隆:转到您下载的目录并执行build.sh
文件。 这将生成缩小的文件,供您使用所有正确的依赖项。
在Mac上: source build.sh
或者您可以使用npm安装依赖项: npm install jvectormap --save
然后使用npm install jvectormap --save
的缩小文件。
不仅仅关于jVectorMap,还有一个简单的观察。
在您的代码中,变量’jvm’无法定义。 检查代码中使用的JS文件并查看’jvm’变量的任何初始化是不是一个好主意?