有没有办法动态配置FusionCharts来渲染链接图表而不使用eval?今天早上我从FusionCharts支持获得this jsFiddle,他们向我展示了如何使用configureLink
方法(在jsFiddle的底部):
chart1.configureLink({
id:'chart1',
type: 'column3d'
});
但请注意chart1
的引用及其作为id的使用 - 这些都在jsFiddle的顶部基本上是硬编码的:var chart1 = new FusionCharts({...
我们正在动态生成我们的图表,但是我们不知道给定页面上有多少图表,所以我们在循环内部进行如下操作:
FusionCharts.ready(function() {
var fusionChartsCfg = JSON.parse(chartJson); //chartJson defined above
for (var i=0, n=fusionChartsCfg.length; i<n; i++) {
var chartConfig = fusionChartsCfg[i];
new FusionCharts(chartConfig).render();
/*
eval('var fChart = chart' + i + '=new FusionCharts(chartConfig)');
fChart.render();
if (chartConfig.linkedChartType) {
fChart.configureLink({
id:'chart' + i,
type: chartConfig.linkedChartType
});
}
*/
}
});
实际上我已经让评论中的代码工作(而不是行new FusionCharts(chartConfig).render();
),但请注意它依赖于eval()
。有办法避免这种情况吗?考虑到需要通过引用/变量名引用FusionChart
实例,并且需要在发送给{的配置中另外使用它作为id
属性,这是我唯一能想到的事情。 {1}}
答案 0 :(得分:1)
我认为id
方法中的configureLink
属性并不重要。请参阅此document。
代码应该可以正常工作
FusionCharts.ready(function() {
var fusionChartsCfg = JSON.parse(chartJson); //chartJson defined above
for (var i=0, n=fusionChartsCfg.length; i<n; i++) {
var chartConfig = fusionChartsCfg[i];
new FusionCharts(chartConfig).render().configureLink({
type: chartConfig.linkedChartType
});
}
});