Bonjour la communauté !
J'ai été un peu bloqué lors de l'utilisation de Classes, alors j'espère que quelqu'un pourra m'aider.
Un peu de contexte : je travaille sur un script qui se divise en deux : un script principal et un script de fonctions, où ce dernier est ensuite inclus dans le script principal. J'essaie de travailler avec des classes et des espaces de noms, pour m'assurer que les variables ne sont trouvées que lorsqu'elles sont censées être trouvées. Mon problème spécifique survient lorsque j'essaie d'utiliser la fonction "On Change" avec une Col List Box.
J'ai fait un exemple de travail minimal qui illustre mon problème. Considérez le code principal :
Names Default To Here(1);
Clear log(); Clear Globals(); Clear Symbols();
// Include the class script
If( !Namespace Exists( "mainNamespace" ), New Namespace( "mainNamespace" ) );
mainNamespace:dir = Get Default Directory();
Include(mainNamespace:dir || "classScript.jsl");
// Create an object of the class and try to use the function
testObject = New Object( exampleClass());
testObject:method1();
puis le script de classe :
Names Default To Here(1);
If( !Namespace Exists( "classNamespace" ), New Namespace( "classNamespace" ) );
Define Class("exampleClass",
_init_ = Method( {},
this:BC = Open( "$SAMPLE_DATA/Big Class.jmp", Show(1) );
this:window = Empty();
);
method1 = Method({},
this:window = New Window( "Test Window", clb = Col List Box( all, On Change( Show( clb << Get Items ) ) ) );
);
);L'idée est d'ouvrir une fenêtre dans laquelle vous pouvez sélectionner certaines colonnes d'une table de données, puis d'obtenir une liste avec les colonnes sélectionnées. Cela fonctionne bien lorsque je n'utilise pas de classes, c'est-à-dire si j'écris simplement la partie classes du script en tant que code "normal". Le code ci-dessus parvient à ouvrir la table de données Big Class et la fenêtre avec la Col List Box, mais chaque fois que je clique sur une colonne, j'obtiens une erreur :
Send attend un objet inscriptible dans l'accès ou l'évaluation de 'Send', clb << /*###*/Get Items /*###*/
Y a-t-il quelque chose que je fais mal ou que je ne comprends pas ? Ou est-ce quelque chose à voir avec la programmation de "On Change" ? Toute aide est appréciée!