如何在不使用 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
});
}
});
有没有办法在不使用 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
});
}
});