如何在不使用 eval 的情况下动态配置 FusionCharts 以呈现链接图表

How to dynamically configure FusionCharts to render linked charts without using eval

有没有办法在不使用 eval 的情况下动态配置 FusionCharts 以呈现链接图表?我今天早上从 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()。有没有办法避免这种情况?这是我唯一能想到的,因为需要通过 reference/variable 名称引用 FusionChart 实例,并且需要另外将其用作 id 属性在发送到 configureLink

的配置中

我认为 configureLink 方法中的 id 属性没有那么重要。请参考这个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
            });         
    }
});