Crittografia della casella di visualizzazioneÈ un problema noto che la sostituzione delle scatole di visualizzazione non funziona con la crittografia, ma pensavo di essere in grado di inserirle in array associativi e avrebbe funzionato. Forse oggi sono molto più cattivo nel mio lavoro. Qualcuno ha un modo migliore per gestire la crittografia displaybox che NON naviga nell'albero del display? Anche tenere una variabile qui o globale è un non-avviatore.
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>Ri: Crittografia della casella di visualizzazione @vince_faller ,
Ho testato il tuo script su JMP PRO 14.3 e 15.0 e ha funzionato. Ho quindi cambiato la funzione per rendere più evidente che stava cambiando l'interfaccia utente.
Ho aperto nuove sessioni di JMP da testare. ??
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name="">1,
for(i=1, i<=nitems(ml), i++,
ml[i] = char(num(ml[i]) +1);
),
//else
ml = {"1", "2"}
);
cb << Set Items(EvalList(ml)); // but this doesn't????
);
gen_dummy_cb_ui = Function ({}, {Default Local},
vlb = Vlistbox(
btn = buttonbox("Press me"),
cb1 = Combo Box ({"Change me", "B"}),
cb2 = Combo Box ({"This should change"}),
rb = radiobox({"1", "2"})
);
aa = Associative Array ({"cb1", "cb2", "rb"}, Eval List ({cb1, cb2, rb}));
Eval (Substitute (
Expr (
btn << Set Function (
Function ({this}, {cb},
do_something(DV_AA)
)
);
cb1 << Set Function (
Function ({this, index}, {cb},
do_something(DV_AA)
)
);
)
,
Expr (DV_AA), aa
));
return(vlb);
);
New Window ("",
gen_dummy_cb_ui();
);
</CLASS>
Ri: Crittografia della casella di visualizzazioneVince - quando crittografate la sceneggiatura, io pensare probabilmente sta eseguendo lo streaming della rappresentazione testuale delle caselle di visualizzazione nella matrice associativa. Non c'è modo per farlo tornare indietro ed essere collegato alle scatole reali in memoria. (Potrebbe non essere esatto; non so perché debba essere trasmesso in streaming.)
Il mio work-around usa temp = NewNameSpace () senza nome esplicito. Aggiungi i dati alla temperatura DOPO la creazione (temp: b1 = box;), quindi passa la temp << G etName come parametro per i callback. In fondo, usa temp = NameSpace (passatoName) per ripristinare lo spazio dei nomi. Infine, aggiungi un OnClose gestore della finestra per eliminare lo spazio dei nomi.
Gli spazi dei nomi senza nome ottengono un nome interno, come "# 37".
Quindi, più o meno così:
do_something = Function( {ns},
{Default Local},
Show( ns );
ns = Namespace( ns );
Show( ns );
cb = ns:cb2;
rb = ns:rb;
Show( cb << class name ); // this works
cb << Set Items( {"1", "2"} ); // but this doesn't????
);
gen_dummy_cb_ui = Function( {},
{Default Local},
vlb = V List Box(
btn = Button Box( "Press me" ),
cb1 = Combo Box( {"Change me", "B"} ),
cb2 = Combo Box( {"This should change"} ),
rb = Radio Box( {"1", "2"} )
);
//aa = Associative Array( {"cb1", "cb2", "rb"}, Eval List( {cb1, cb2, rb} ) );
temp = New Namespace();
temp:cb1 = cb1;
temp:cb2 = cb2;
temp:rb = rb;
Eval(
Substitute(
Expr(
btn << Set Function(
Function( {this},
{cb},
Show( "btn" );
do_something( DV_NS );
)
);
cb1 << Set Function(
Function( {this, index},
{cb},
Show( "cb1" );
do_something( DV_NS );
)
);
),
Expr( DV_NS ), temp << getname
)
);
Return( Eval List( {vlb, temp << getname} ) );
);
{box, ns} = gen_dummy_cb_ui();
New Window( "", box );
Eval(
Eval Expr(
box << onclose(
Delete Namespaces( Expr( ns ) );
1;
)
)
);
Show( Namespace( ns ) );Ri: Crittografia della casella di visualizzazione@ gzmorgan0, ha funzionato per te anche dopo averlo crittografato?
@Craige_Hales , L'ho già fatto in modo simile allo stile Pseudo Object Oriented di Drew.
Il problema che incontro è se devo creare una copia di una scatola in modo dinamico, devo tenere un elenco di spazi dei nomi creati per eliminarli in seguito.
E se il pulsante (o qualunque cosa sia) che rende la copia del riquadro non sta parlando con la funzione che crea la finestra principale, non sa a quale elenco aggiungere.
Diventa molto randagio molto rapidamente.
Questo potrebbe essere un po 'esoterico, ma mi imbatto sempre.
La cosa che mi confonde DAVVERO è perché posso chiamare << Nome classe. Ma non << Imposta elementi, se si tratta di un'interpretazione testuale.
Ri: Crittografia della casella di visualizzazioneVince,
Scusa, ho perso la parte di crittografia.
Ti suggerisco di incorporare il tuo script in una Script Box () ed eseguire la finestra di script. Quindi crittografarlo, sembra funzionare per me.
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
Ri: Crittografia della casella di visualizzazioneQuesto avrebbe purtroppo interrotto tutti i nostri test unitari. Inoltre, sarebbe un NIGHTMARE da supportare poiché tutto è una stringa.
Ci giocherò per vedere se posso usare un bocconcino interessante a mio vantaggio.