2017-07-05 1 views
1

Je suis face à un problème où je suis en train de instancier un objet dans la fonction de configuration de p5, en utilisant un rappel pour le faire:instancier un objet via l'élément DOM dans la configuration() sur p5

C'est la partie de sketch.js pertinente au problème:

var g; //for graph instance 
var dropzone; //for the file dropping area 

function setup() { 
    createCanvas(640, 480); 

    dropzone = select('#dropzone'); //selects the <p> element I'm using as dropzone 
    dropzone.drop(process_file, unhighlight); //unhighlight is just a function to make the drop area not-highlighted 
} 

function draw() { 
    background(200); 
    if (g) { 
     g.show(); 
    }else{ 
     msg = "Please, load a file by dropping it in the box above"; 
     text(msg, width/2, height/2); 
    } 
} 

// callback being used to process the text file content 
function process_file(file){ 
    data = file.data; //gets file data(content) 
    lines = data.split('\n'); // split the lines 
    digraph = lines[0] == 1 ? true : false; // is it a digraph? 
    v = int(lines[1]); 
    g = Graph(digraph, v); //the class I"m using to instantiate the graph 
    console.log(g); // <-- says undefined 
    g.init_graph(); // initialize all vertices 
    for (var i = 2; i < lines.length; i++) { 
     edge = lines[i].split(' '); 
     g.add_edge(edge[0], edge[1], edge[2]); 
    } 
} 

je l'ai déjà vérifié à l'aide console.log() et le contenu du fichier est correctement chargé, et les valeurs sont correctes dans ce que je me attendais. La classe Graph() se trouve dans un autre fichier, mais elle est importée ainsi que le sketch.js. J'ai aussi essayé de mettre le script en important à la fin de la page, mais j'ai obtenu le même résultat, le g dit toujours undefined. Ce que je n'ai pas essayé est de mettre tout le code de ma classe Graph dans le fichier sketch.js, mais je devrai mettre plus de 15 algorithmes sur la classe plus tard, donc le fichier d'esquisse augmentera dans une taille non nécessaire. Je pensais que le g en déclarant une variable globale, je n'aurais aucun problème avec elle. Je suis assez inexpérimenté avec JavaScript, donc c'est probablement une erreur de débutant sur une sorte de commande de chargement, donc s'il vous plaît, si vous répondez à cette question, montrez-moi la raison pour laquelle cela ne fonctionne pas comme il est. Si vous avez besoin d'un autre code, merci de me le faire savoir.

Merci d'avance.

+0

Voulez-vous dire 'g = new Graph (digraph, v);'? –

+1

oh mon, c'était le problème. Je suis habitué à Python, pas besoin de mot-clé 'new'. Pouvez-vous s'il vous plaît afficher ceci comme réponse afin que je puisse marquer comme résolu? – inblank

+0

Bien sûr, répondre posté! –

Répondre

1

Regarder cette ligne:

g = Graph(digraph, v); 

Je pense que vous vouliez faire:

g = new Graph(digraph, v); 

Cela crée une nouvelle instance et stocke une référence à cette instance dans la variable g.