2017-09-28 1 views
0

J'ai un problème et j'ai besoin d'aide. Je crée des graphiques avec chart.js et je veux les mettre à jour avec une fonction.manipuler des objets à l'intérieur d'une fonction

je la configuration suivante:

function createchart(obj){ 
var kdChart = new Chart(kdchart, { 
      type: 'line', 
      data: data, 
      options: options 
     }); 

maintenant je tente de mettre à jour le tableau avec une 2ème fonction comme ceci:

function updatechart(){ 
    //collect new data... 
    kdChart.data.labels = datepoints; 
    kdChart.data.datasets[0].data = kdata; 
    kdChart.data.datasets[1].data = ddata; 
    kdChart.update(); 
} 

Maintenant, j'obtiens l'erreur

TypeError: kdChart.data is undefined

Lorsque Je crée le graphique en dehors de la fonction createchart cela fonctionne. Qu'est-ce que je fais mal ici? Comment puis-je mettre à jour un objet depuis une fonction?

Répondre

1

Le problème est que votre variable ne vit que dans votre fonction. Faites quelque chose comme

function createchart(...) { 
    var kdchart = ... 
    ... 
    return kdchart; 
} 

Et lorsque vous appelez cette fonction go bâton kdchart quelque part où vous pouvez trouver - sur l'objet de la fenêtre est nulle autre

+0

Je pense que je l'ai eu ... Merci ... Je l'ai essayé ici un il fonctionne: https://jsfiddle.net/pfmd86/fcbcLbn3/ – pfmd86

+0

maintenant j'ai une autre « mais » ... J'appelle la fonction pour créer le graphique à l'intérieur d'une fonction de succès d'un appel ajax ... Et j'appelle plus d'un "create-chart" à l'intérieur de cette fonction ... – pfmd86

+0

S'il y a plusieurs diagrammes impliqués alors créez un objet pour stocker le graphiques. Si cette réponse a répondu à votre question, veuillez l'accepter. –

0

Il est à cause de la portée de kdChart variable n'est pas globale . C'est en vie jusqu'à ce que l'exécution soit à l'intérieur de cette fonction sinon elle est morte. Soit vous pouvez le créer globalement ou créer cet objet à l'aide d'une fonction et le renvoyer mais vous devez appeler cette fonction partout où vous en avez besoin et pas nécessairement que vous obtiendrez la même référence.

Créer un objet global afin qu'il n'ait qu'une seule copie à laquelle accéder.

+0

C'est clair maintenant. J'ai appelé la variable en dehors de la fonction et tout fonctionne maintenant! – pfmd86