.. _widgetpedia/elements/datastore_elements/controllers:
controllers
===========
.. toctree::
:maxdepth: 1
:hidden:
:titlesonly:
dataController
dataFormula
dataRpc
I controller sono elementi dinamici di business logic a eventi che si attivano e vengono eseguiti a fronte di:
* alcuni cambiamenti sul *datastore* se hanno parametri contenenti un *triggering_path* ovvero un path prefissato da ``^``
* eventi propagati da una *publish* (``genro.publish()``) se il controller ha il corrispondente parametro ``subscribe_``
Vediamo prima un esempio con:
.. raw:: html
Vediamo adesso la stessa cosa con:
.. raw:: html
.. hint::
Da una recente *release* di luglio 2021 è diventato possibile collegare direttamente qualsiasi controller a un :ref:`button` o *menuline*. L'innesco avverrà automaticamente al clic sul bottone o linea di menu, senza quindi la necessità di utilizzare il meccanismo *publish/subscribe* o l'attributo ``fired_``.
.. raw:: html
**Parametri:**
+------------------------+------+--------------------------------------------------+
| Nome parametro | Tipo | Descrizione |
+========================+======+==================================================+
|_class |T |Permette di assegnare una specifica classe CSS al |
| | |widget |
+------------------------+------+--------------------------------------------------+
|height |T |Permette di assegnare un'altezza al widget |
+------------------------+------+--------------------------------------------------+
|width |T |Permette di assegnare una larghezza al widget |
+------------------------+------+--------------------------------------------------+
|border |T |Permette di assegnare un bordo al widget |
+------------------------+------+--------------------------------------------------+
|rounded |L |Permette di assegnare un arrotondamento al widget |
+------------------------+------+--------------------------------------------------+
|style |T |Permette di assegnare uno stile (da esprimersi |
| | |come serie di attributi CSS) al widget |
+------------------------+------+--------------------------------------------------+
|background |T |Permette di assegnare uno sfondo al widget |
+------------------------+------+--------------------------------------------------+
| *Controllers Parametri* |
+------------------------+------+--------------------------------------------------+
|_delay |T |Il ritardo (in ms) tra l'evento trigger e |
| | |l'esecuzione del controller |
+------------------------+------+--------------------------------------------------+
|_onStart |B |Se impostato a True, il controller verrà lanciato |
| | |al caricamento della pagina. Può anche contenere |
| | |un valore numerico (es: _onStart=500), in quel |
| | |caso verrà impostato un ritardo (in ms) prima di |
| | |avviare la chiamata. |
+------------------------+------+--------------------------------------------------+
|subscribe\_ |T | |
+------------------------+------+--------------------------------------------------+
|_ask |T |Permette di identificare in un dizionario i |
| | |parametri da richiedere all'utente alla pressione |
| | |del bottone, che verranno poi utilizzati |
| | |nell'azione (es. _ask=dict(title='Test',fields=[di|
| | |ct(name='msg',lbl='Message')])) |
+------------------------+------+--------------------------------------------------+
|_if |T |Espressione javascript che permette di |
| | |condizionare l'avvio del controller alla presenza |
| | |di un valore (es: _if='value') |
+------------------------+------+--------------------------------------------------+
|_else |T |Frammento di codice javascript che completa _if, |
| | |indicando un altro comportamento da seguire |
| | |qualora _if fosse falsa |
+------------------------+------+--------------------------------------------------+
|_userChanges |T |Se impostato a "True" fa scattare il controller |
| | |solo in caso di modifiche al record |
+------------------------+------+--------------------------------------------------+