如何动态配置FusionCharts以在不使用eval

时间:2015-08-03 14:45:12

标签: javascript eval fusioncharts

有没有办法动态配置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}}

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
            });         
    }
});