Numero variabile di GraphBox. Come posso identificare a quale GB sto inviando clic?nw = new window("graphs", vlb = v list box());
dirname = "jpegs";
set default directory(dirname);
foreach({jpeg}, files in directory(dirname), // dexter.jpg, samurai_jack.jpg, spongebob.jpg
img = new image(jpeg);
msg = eval insert("\!"^jpeg^\!"");
h = graphbox(
<<ADD image=""></ADD>The above gives me
3 graphboxes :white_heavy_check_mark:</img>with three correctly rendered images, :white_heavy_check_mark:</img>but StatusMsg always sends "Spongebob.jpg". (Without the evalinsert(), just sending jpeg to StatusMsg, it throws an error.)
I want StatusMsg to give me the name of the image whose graphbox I clicked on.
Basically, I can kinda sorta imagine two routes:
1. Eval and related functions? I still haven't dug into that side of JSL very deeply.
2. Xpath? Maybe log the image name in a List; index will correspond with the frame box number.
<LINGO-LABS id="lingo-labs-797481" slang="en-US" mode="UPDATE"><LINGO-LABEL>Automazione e scripting</LINGO-LABEL></LINGO-LABS>Re: Numero variabile di GraphBox. Come posso identificare a quale GB sto inviando clic?Ogni volta che un utente clicca su un'immagine, la trappola per topi riceve l'ordine di chiamare
statusmsg( variablename)
So: it will execute statusmsg( variablename), check for the current content of variablenamea and display it.
Come hai notato e provato a fare: devi forzare in qualche modo la valutazione della variabile.
Il problema:
se si memorizza il risultato in un'altra variabile ( msg ) si ha lo stesso problema: solo un altro nome di variabile.
Cosa vuoi fare:
Per ogni immagine pre-valutare il nome dell'immagine e attivare ad esempio
statusmsg("samurai_jack.jpg")Nel 90% dei casi questa pre-valutazione può essere effettuata tramite Eval(Eval Expr()).
Per i rimanenti, utilizzare Eval(Substitute())
Gestione delle espressioni in JMP: suggerimenti e trappole
Eval (Eval Expr( h=graphbox(
<<ADD image=""></ADD>
Re: Numero variabile di GraphBox. Come posso identificare a quale GB sto inviando clic?Lol, l'ho capito
foreach({jpeg}, files in directory(jpegs),
img = new image(jpeg);
h = Eval(
Eval Expr(
graphbox(
<<ADD image=""></ADD>It's not clear to me why `jpeg` needs the expr() and `img` doesn't, though. Both of those vars are 'born' on a per-loop basis
Re: Numero variabile di GraphBox. Come posso identificare a quale GB sto inviando clic?sì, questo è un bel problema in JSL. Sfortunatamente, non c'è documentazione su quali argomenti vengono valutati e quali argomenti vengono semplicemente "trasferiti". E a volte non è affatto facile scoprirlo:
Head valuta la sua argomentazione?
Ho chiesto al supporto JMP un elenco ufficiale delle funzioni che valutano/non valutano il loro argomento. Sfortunatamente, non esiste un elenco del genere.
Un altro approccio: utilizzare un'evidenziazione della sintassi avanzata nell'editor JSL: la funzione valuta il suo argomento?
Spero che verrà implementato con alcune delle prossime versioni...
In realtà, molte(!!!) funzioni in JSL non valutano (alcuni) dei loro argomenti prima di utilizzarli.
Questo approccio è estremamente potente!
L'esempio più evidente di "appena trasferito":
New column (.... Formula(<U>Expression gets just transferred</U>))
Lo stesso vale per la trappola per topi.
Se ci pensi bene, è molto gentile da parte di JMP non valutare l'argomento : )
Si desidera modificare il messaggio di stato ogni volta che l'utente clicca sull'immagine, non nel momento in cui si esegue il codice.
D'altro canto: per aggiungere l'immagine alla finestra, JMP deve aprire il file immagine e, per farlo, guardare nella variabile.
NB: A volte può essere utile sostituire un argomento con Eval(argomento).
A volte.
Qui: no.