Есть ли способ динамически настроить FusionCharts для визуализации связанных диаграмм без использования eval? Я получил this jsFiddle от FusionCharts поддержки сегодня утром, когда они показали мне, как использовать метод configureLink
(в нижней части jsFiddle):Как динамически настраивать FusionCharts для визуализации связанных диаграмм без использования eval
chart1.configureLink({
id:'chart1',
type: 'column3d'
});
Заметим, однако, ссылки на chart1
и его использование в качестве идентификатора - это как по существу, жестко закодированы в верхней части 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
собственности в конфигурации, переданной в configureLink
Вы уверены, что 'id' необходимо обратиться к (глобальной) переменной имя? Вы пробовали свой код только с помощью 'var fChart = new FusionCharts (chartConfig);' (no 'eval')? – Bergi