¡Hola comunidad!
Me quedé un poco atascado al usar Clases, así que espero que alguien pueda ayudarme.
Un poco de contexto: estoy trabajando en un script que se divide en dos: un script principal y un script de funciones, donde este último se incluye en el script principal. Estoy tratando de trabajar con clases y espacios de nombres, para asegurarme de que las variables solo se encuentren cuando se supone que se deben encontrar. Mi problema específico surge cuando trato de usar la función "Al cambiar" con un cuadro de lista de columnas.
Hice un ejemplo de trabajo mínimo que ilustra mi problema. Considere el código 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();
y luego el script de clase:
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 ) ) ) );
);
);La idea es tener una ventana abierta donde puede seleccionar algunas columnas de una tabla de datos y luego obtener una lista con las columnas seleccionadas. Esto funciona bien cuando no uso Clases, es decir, si solo escribo las clases como parte del script como código "normal". El código anterior logra abrir la tabla de datos de Big Class y la ventana con el cuadro de lista de columnas, pero cada vez que hago clic en una columna, aparece un error:
Enviar espera un objeto programable en acceso o evaluación de 'Enviar', clb << /*###*/Obtener elementos /*###*/
¿Hay algo que estoy haciendo mal, o no entiendo? ¿O tiene algo que ver con la forma en que se programa "On Change"? ¡Cualquier ayuda es apreciada!