Metodo th_view¶
Il metodo th_view è un metodo di hook che permette di ridefinire la View nel suo complesso o parti della stessa. Tipicamente è utilizzato per modificare aspetti estetico/funzionali quali il titolo della pagina o la barra superiore, o per innescare eventi al clic sui record tramite dei controllers.
Modificare la top bar di una View: la replaceSlots¶
Un uso tipico, in alternativa alla creazione di una nuova barra vera e propria nel th_top o nel th_bottom , è quello di aggiungere un bottone nella barra superiore di default della View.
Sia che si voglia rimuovere, sostituire o aggiungere un componente alla barra la procedura è la stessa, e si basa sul metodo replaceSlots
:
def th_view(self,view):
bar = view.top.bar.replaceSlots('delrow','nuova_ricerca,5,aggiungi_lista,5,delrow')
bar.nuova_ricerca.slotButton('Nuova ricerca').dataController("""SET .queryBySample = new gnr.GnrBag();
FIRE .clearStore;""")
bar.aggiungi_lista.slotButton('Aggiungi a lista').dataController("""genro.publish('table_script_run',
{table:'cvgest.candidato',
res_type:'action',
resource:'aggiungi_a_lista',
selectionName:grid.collectionStore().selectionName,
selectedPkeys:selectedPkeys});""",
grid=view.grid.js_widget,
selectedPkeys='=.grid.currentSelectedPkeys')
Si noti che in questo caso, accanto al bottone «-» che elimina i record, abbiamo aggiunto altri due bottoni, separati tra loro da 5 pixel, il primo per svuotare la ricerca corrente, il secondo per aggiungere il record selezionato (o i record selezionati) a una lista, tramite una action apposita.
Suggerimento
I widget dei quali è possibile effettuare il replace sono vari, e dipendono da come è stata configurata la pagina del TableHandler, ma di default quelli disponibili (da sinistra a destra) sono: 'fastQueryBox'
, 'runbtn'
, 'queryMenu'
, 'viewsMenu'
, 'filterSelected'
, 'menuUserSets'
, 'export'
, 'importer'
, 'resourcePrints'
, 'resourceMails'
, 'resourceActions'
, 'templateManager'
, 'stats'
, 'advancedTools'
, 'delrow'
, 'addrow'
, 'viewlocker'
.
Si noti che in alternativa all’indicazione di uno slot preciso è possibile usare il simbolo #
e decidere poi se posizionare a sinistra o destra il contenuto desiderato:
def th_view(self,view):
bar = view.top.bar.replaceSlots('#','nuova_ricerca,5,aggiungi_lista,5,#')
Autore della sezione: Davide Paci