2017-01-17 5 views
0

ich diese gefunden: https://www.amcharts.com/kbase/dynamic-chart-container-size-based-on-number-of-data-points/amCharts: dynamische Länge von div Container

AmCharts.addInitHandler(function (chart) { 
    // set base values 
    var categoryWidth = 25; 

    // calculate bottom margin based on number of data points 
    var chartHeight = categoryWidth * chart.dataProvider.length; 

    // set the value 
    chart.div.style.height = chartHeight + 'px'; 

}, ['serial']); 

In meinem Fall habe ich die Daten über

"dataLoader": { 
       "url": "/pages/trainingsProProjectChartData", 
       "format": "json" 
      }, 

laden Wie kann ich

chartHeight berechnen

in diesem Fall? Wie kann ich auf die Anzahl der Daten von dataLoader zugreifen?

UPDATE:

mit

console.log (chart.dataProvider.length);

ich 'chart.dataProvider ist nicht definiert'

console.log (Grafik);

Ich kann das Objekt 'DataProvider' sehen !! und es enthält alle meine Daten. Aber ich kann nicht darauf zugreifen ?!

Antwort

1

Der von Ihnen verwendete Code wird ausgelöst, bevor der dataLoader ausgeführt wird, weshalb der dataProvider leer ist.

Eine einfache Möglichkeit, dies zu umgehen, ist, den Code einfach in den complete Callback des dataLoaders zu setzen. Dadurch wird sichergestellt, es läuft, nachdem die Daten geladen ist:

"dataLoader": { 
    "url": "/path/to/your/endpoint", 
    "complete": function(chart) { 
     // set base values 
     var categoryWidth = 25; 

     // calculate bottom margin based on number of data points 
     var chartHeight = categoryWidth * chart.dataProvider.length; 

     // set the value 
     chart.div.style.height = chartHeight + 'px'; 
    } 
    }, 

Demo

+0

Vielen Dank !!! – user1555112