2015-08-03 5 views
0

Есть ли способ динамически настроить 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

+0

Вы уверены, что 'id' необходимо обратиться к (глобальной) переменной имя? Вы пробовали свой код только с помощью 'var fChart = new FusionCharts (chartConfig);' (no 'eval')? – Bergi

ответ

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

Работы в jsfiddle Я обновил: http://jsfiddle.net/j49phLzL/4/ –

 Смежные вопросы

  • Нет связанных вопросов^_^