Caja de botones JSL: arregla las variables al momento de la creación del botónMi script crea una lista de botones usando un bucle for. cada botón llama a una función "RepGen" que necesita el nombre del botón para una entrada. Sin embargo, el comportamiento del botón no parece evaluarse hasta que se presiona el botón, en cuyo momento el bucle for ha sobrescrito la variable que contiene el nombre del botón. ¿Hay alguna manera de evaluar esta variable en el momento en que se crea el botón en lugar de cuando se presiona? ¿O hay una mejor manera de hacer esto?
dtSum = dt << Summary( Group( :ColX ) );
For( i = 1, i <= N Rows( dtSum ), i++,
varName = dtSum:ColX[i];
obparts << append( Button Box( varName, RepGen( varName ) ) );
);
Re: Cuadro de botones JSL: corregir variables en el momento de la creación del botónEl uso de Eval (EvalExpr ()) o Eval (Substitute ()) le permitirá hacer que las variables de tiempo de ejecución sean estáticas. Consulte el índice de secuencias de comandos para ver ejemplos de cómo usarlos.
Names Default to Here( 1 );
RepGen = function({btn_name},
{DEFAULT LOCAL},
print(btn_name);
);
vlb = Vlistbox();
btns = {"Btn 1", "Other", "Button 2 (or3)"};
for(i=1, i<=nitems(btns), i++,
vlb << Append(
Eval(
//run just this block to show that the buttons are getting evaluated at creation time
EvalExpr(
Buttonbox(btns[i], RepGen(Expr(btns[i])))//the expr will evaluate inside the evalexpr
)
)
)
);
new window("Test",
vlb
);