Put, Fire e Delay

Abbiamo visto precedentemente che mettendo un valore in un path possiamo attivare un dataController o un dataFormula. Questo avviene perchè al variare del contenuto di una locazione dello store tutti i sourceNode che hanno dei parameteri con “^” vengono informati del cambiamento e possono reagire di conseguenza.

Parliamo di cambiamento di dati. Questo significa che mettendo un valore già presente in una locazione, non viene attivato nessun trigger.

Negli esempi che seguono ci proponiamo di creare un bottone che deve incrememtare un contatore. Viene quindi preparato un dataController che sarà attivato al variare del contenuto della locazione “.flag”.

Nell” esempio vediamo nella prima riga il bottone “Increase counter” che mette il valore true nella locazione '.flag' con lo scopo di far scattare il dataController che incrementa il contatore.

Se premiamo più volte questo bottone il contatore non si incrementa perchè non esiste nessun cambiamento di valore in “.flag”.

Nella seconda riga abbiamo aggiunto un bottone “Reset Flag” che va a settare il valore false in modo di poter nuovamente usare il bottone “Increase counter”. Quindi dobbiamo premere prima uno e poi l’altro bottone perchè il controller rilevi il cambiamento.

Notiamo però che il dataController viene chiamato anche per il reset e quindi il contatore si incrementa anche in questa fase.

Per ripristinare un funzionamento corretto siamo costretti, quindi, nella terza riga ad aggiungere un test sul valore del flag e procedere all’incremento solo se il valore è true .

PUT

Il macro comando PUT mette un valore in una locazione dello store ma impedisce l’esecuzione dei trigger. Con questa macro, di fatto, aggiriamo il sistema dei trigger e quindi suggeriamo di evitarne l’uso a meno di esigenze davvero particolari.

Nella prima parte dell’esempio useremo il comando PUT per riportare a null il valore del flag dopo che con il comando SET lo avevamo portato al valore true.

Questo accorgimento fa funzionare il nostro contatore ma ci costringe sempre a resettare il flag con il bottone Reset Flag

Nella seconda parte, appena eseguito il comando SET, eseguiamo immediatamente il comando PUT in modo da resettare il valore iniziale.

In questo modo il nostro contatore funziona con un bottone solo.

FIRE

La macro FIRE consente di settare in una locazione un valore e di riportarlo immediatamente a null. In pratica esegue in un unico comandio una SET e una PUT.

Nella prima parte dell’esempio, viene usata la macro FIRE che setta il valore al path desiderato ma immediatamente rimette il valore a null. Il nostro esempio funziona quindi con la minima fatica.

Il comando FIRE è così usato che ne è ammessa anche una versione “rapida” che non richiede di indicare un valore. Il default è true. Scrivere quindi «FIRE .alfa.beta = true» o «FIRE .alfa.beta» è perfettamente uguale. La seconda parte dell’esempio mostra quindi questa sintassi.

Il widget Button usa molto spesso il comando FIRE e quindi, invece di usare action e scrivere FIRE, è ammesso il parametro fire=”path”.

Delay

Anche se non strettamente inerente all’argomento SET, PUT e FIRE, vogliamo introdurre qui un parametro che spesso è usato in vari contesti di genropy _delay

Un bottone di norma si auto disabilita al click dell’utente per evitare di dare più volte inavvertitamente lo stesso comand. Se desideriamo invece gestire il numero dei click effettuati su un bottone, possiamo manualmente passare un parametro _delay che esprime in millisecondi il ritardo che diamo all’esecuzione del click. A differenza del delay automatico, non c’è in questo caso una disabilitazione ma comunque, qualunque sia il numero dei click, l’effetto è di generare una sola volta la action.

Esiste comunqe la variabile _counter che viene automaticamente messa nello scope della action che ci restituisce il numero di click avvenuti.

Nella prima riga abbiamo un bottone con un ritardo molto piccolo (10ms) e che ci consente di cliccare molto rapidamente e ottenere un avanzamento del counter.

Nella seconda riga invece notiamo che qualunque sia il numero dei click sul bottone il counter avanza solo dopo che abbiamo smesso di cliccare e avanza di una sola unità.

Nella terza usiamo la variabile _counter per sapere il numero dei click che l’utente ha generato in modalità a “raffica”.