使用Jaspersoft Studio中的Highcharts进行库复制问题

时间:2015-06-15 16:02:06

标签: javascript highcharts requirejs

我遇到Highcharts库的问题。我使用Jaspersoft Studio中提供的自定义可视化工具创建了各种图表。它们不使用所有相同的库,例如我有一个使用Highmaps.js的Bubble Map图表和一个使用Highstock.js的Stock图表。

当我在Jaspersoft Server中将其可视化时,每个报告似乎都运行良好。但是当我创建一个包含两个不同报告的仪表板时,我有这个错误:

  

Uncaught Highcharts错误#16:www.highcharts.com/errors/16   已经在页面中定义的Highcharts

第二次在同一页面中加载Highcharts或Highstock时会发生此错误,因此已经定义了Highcharts命名空间。请记住Highcharts.Chart构造函数和Highcharts的所有功能都包含在Highstock中,因此如果您组合运行Chart和StockChart,则只需加载highstock.js文件。

我确实理解Highmaps.js和Highstock.js之间存在冲突,因为它们具有共同的特征。但我不知道如何避免它:我需要来自Highmaps和Highstocks的功能。以下是我如何包含这些库来定义我的报告:

第1张图表(股票图表)

define(['jquery', 'highstock'], function(hs_test) {
  return function(instanceData) {
    /*...*/
  }
});

-2nd chart(气泡图)

define(['jquery','highmaps','data','world','exporting'], function (mapbubble) {
  return function(instanceData) {
    /*...*/
  }
});

以下是我编写build.js文件的方法:

({
  optimize: 'none',
  baseUrl: '',
  paths: {
    jquery: 'jquery',
    highstock: 'highstock',
    exporting: 'exporting',
    'highstock_test': 'highstock_test'
  },
  shim: {
    'highstock': {
      deps: ["jquery"],
      exports: 'Highcharts'
    }
  },

  name: "highstock_test",
  out: "highstock_test.min.js"
})

我在这里使用了Highstock示例,但我对使用Highmaps的报告做了大致相同的事情。我希望我不是第一个遇到这个问题的人,如果有的话,有人可以建议我一种避免这种库重复的方法吗?

修改

根据建议,我尝试用highstock.js + map.js替换highmaps.js如下:

define(['jquery','highstock','map','data','world','exporting'], function ($, Highcharts) {
return function (instanceData) {
/*...*/
}
})

我现在有一个错误17:

  

请求的系列类型不存在

     

将chart.type或series.type设置为a时会发生此错误   在Highcharts中未定义的系列类型。一个典型的原因可能是   您缺少系列类型所在的扩展文件   定义,例如为了运行你需要的区域范围系列   加载highcharts-more.js文件。

现在Highmaps.js缺少一些东西,我不知道是什么。 期待建议。

更新

我可以通过包含Highcharts-more.js来避免这个错误17,但是在运行两个图表时我仍然有这个错误16。

以下是我在同一个信息中心运行两份报告时遇到的错误:

Javascript console

2 个答案:

答案 0 :(得分:2)

请参阅我对此question的评论。您只需加载“base”highstock.js,然后加载之后要加载的任何其他模块:

<script src="code.highcharts.com/stock/highstock.js"></script>
<script src="code.highcharts.com/stock/modules/map.js"></script>
<script src="code.highcharts.com/stock/modules/ANOTHERMODULEYOUNEED.js"></script>

根据您的需要,您可以加载highmaps.js,因为它还包含许多其他图表类型。

答案 1 :(得分:1)

最后,我已经通过合并所有Highcharts文件解决了这个问题,我需要绘制我的气泡图表,如@PawełFus所建议的那样,并在Highcharts变量中包含条件:

if (typeof Highcharts == 'undefined') {

/* Optimized merge files containing both highstock.js, highcharts-more.js and map.js */

}

然后我将此文件用于我想要构建的所有Highcharts图表。

这很有效。谢谢大家,特别是@PawełFus。