Hallo Gemeinde!
Ich bin bei der Verwendung von Klassen etwas steckengeblieben, also hoffe ich, dass mir jemand helfen kann.
Ein bisschen Kontext: Ich arbeite an einem Skript, das zweigeteilt ist: ein Hauptskript und ein Funktionsskript, wobei letzteres dann in das Hauptskript eingebunden wird. Ich versuche, mit Klassen und Namespaces zu arbeiten, um sicherzustellen, dass Variablen nur gefunden werden, wenn sie gefunden werden sollen. Mein spezifisches Problem tritt auf, wenn ich versuche, die Funktion "On Change" mit einem Col List Box zu verwenden.
Ich habe ein minimales Arbeitsbeispiel erstellt, das mein Problem veranschaulicht. Betrachten Sie den Hauptcode:
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();
und dann das Klassenskript:
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 ) ) ) );
);
);Die Idee ist, ein Fenster zu öffnen, in dem Sie einige Spalten aus einer Datentabelle auswählen können, und dann eine Liste mit den ausgewählten Spalten zu erhalten. Dies funktioniert gut, wenn ich keine Klassen verwende, dh wenn ich nur den Klassenteil des Skripts als "normalen" Code schreibe. Der obige Code schafft es, die Big Class-Datentabelle und das Fenster mit der Col List Box zu öffnen, aber wenn ich auf eine Spalte klicke, erhalte ich eine Fehlermeldung:
Send erwartet skriptfähiges Objekt beim Zugriff oder Auswertung von 'Send', clb << /*###*/Get Items /*###*/
Mache ich etwas falsch, oder verstehe ich es nicht? Oder hat es etwas mit der Programmierung von "On Change" zu tun? Jede Hilfe ist willkommen!