Creando script de botón en un bucle forEstoy tratando de generar un cuadro de tabla con un número de filas que serán variables. Quiero que cada fila tenga un botón que haga alguna función a una variable correspondiente en una lista.
Problema actual: los scripts en el bucle for no interpretan eval expr como esperaba. El script resultante adjunto a cada casilla de verificación debe imprimir que se presionó el botón 1, 2 o 3. En cambio, siempre dice 4. El objetivo final es realizar una operación en UserText[i] cuando se hace clic en la casilla de verificación.
¿Alguien puede ayudarme a explicar qué estoy haciendo mal? ¡Gracias!
Pregunta adicional: estoy usando casillas de verificación porque son más pequeñas que las cajas de botones y las cajas de botones no parecen ser redimensionables. Idealmente, serían solo pequeños íconos en los que se puede hacer clic. ¿Hay alguna manera amigable de hacer una pequeña "x" en la que se pueda hacer clic en lugar de un botón completo?
Versión JMP: 16
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>secuencias de comandosRe: Crear script de botón en un bucle forHola,
Estabas muy cerca.
Si usa Eval ( EvalExpr ( ) ) para envolver toda la instrucción tb << add row () como se muestra a continuación, obtendrá el comportamiento que busca:
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
eval(evalexpr(
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>Re: Crear script de botón en un bucle forAquí está mi forma de la vieja escuela de manejar esto
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>Re: Crear script de botón en un bucle forMi método es un poco más complicado usando XPath y Containers(), pero en algunos casos puede ser más robusto (y puede extenderlo a otros elementos además de Checkbox si cambia el XPath)
Names Default To Here(1);
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window("Select files",
tb = Table Box(Col Box("Text", {}), Col Box("Button", {}), Col Box("Third", {})),
tb << set row borders(1)
);
expr_tablebox_get_checkbox_idx = Expr(
row_idx = Contains((this << parent) << XPath("//CheckBoxBox"), this);
);
expr_tablebox_get_column_idx = Expr(
col_idx = Contains(((this << parent) << parent) << Get Names, (this << parent) << get heading)
);
expr_check_box = Expr(
expr_tablebox_get_checkbox_idx;
expr_tablebox_get_column_idx;
Show(row_idx, col_idx);
);
For Each({txt}, UserText,
tb << Add Row(
{Text Box(txt, << Set Width),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
)
};
);
);
</CODE>Al usar este método, es posible que se encuentre con algunos problemas en los que las expresiones se evalúan correctamente según el lugar donde las llame, por lo que no debería ser el primer método para probar</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-601493" slang="en-US" mode="NONE">Re: Crear script de botón en un bucle for</LINGO-SUB><LINGO-BODY id="lingo-body-601493" slang="en-US" mode="NONE"><P>Volví como anoche estaba pensando, "esto también se puede hacer con Xpath y contiene". El post de Jarmo ya estaba aquí; el ejemplo que puse a continuación es bastante similar, pero asigna todas las funciones de casilla de verificación a la vez con una declaración Xpath, una vez que haya creado la tabla. Esta se está convirtiendo en una de mis formas favoritas de manejar este tipo de cosas.</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box( Col Box( "Text", {} ), Col Box( "Button", {} ), << set row borders(1) );
);
//add rows with a small button next to each one
For each ( { txt, i }, UserText,
tb << add row( {Text Box( txt, <<SET width=""></SET>
Re: Crear script de botón en un bucle for¡Gracias! Tendré que dedicar un poco más de tiempo a entender esto, no he usado la función set y no entiendo muy bien el comportamiento después de una lectura rápida de la guía de secuencias de comandos y algunos ejemplos. Preveo una situación en el futuro en la que necesitaré una funcionalidad como esta, así que lo recordaré por un momento y regresaré si llega ese momento.
Para confirmar algo básico que no parece estar establecido explícitamente en el material: al definir una función, ¿es 'este' un término predefinido en JSL que apuntará a cualquier objeto al que se adjunte la función? Veo algunos ejemplos que usan 'esto' en el argumento de la función establecida sin que aparezca en ningún otro lugar de la definición de la función (estoy un 60% seguro de que estoy usando los términos correctos). Las funciones matemáticas básicas son intuitivas, como MyFn = function ({x,y}, x + y), pero luego las cosas parecen aumentar en complejidad muy rápidamente cuando nos metemos en los objetos.
Re: Crear script de botón en un bucle forEs solo el primer parámetro cuando se usa con << Establecer función (ya que no tiene que ser este , parece que el índice de secuencias de comandos JMP17 está usando esta caja Por ejemplo). Y ese primer argumento es una referencia a ese cuadro específico en el que se establece esa función.Esta página de ayuda podría proporcionar más información con algunos ejemplos:
Guía de secuencias de comandos > Árboles de visualización > Construir ventanas personalizadas > Establecer función y Establecer secuencia de comandos
Además, con algunos cuadros de visualización, es posible que pueda usar múltiples parámetros con << Establecer función . Puede verlos en el índice de secuencias de comandos (si puede encontrarlos, a veces puede ser un poco complicado)
