Blog

Novità: uso dei controller con bottoni e menuline

Novità: uso dei controller con bottoni e menuline

Con un importante aggiornamento rilasciato nella prima settimana di luglio abbiamo introdotto alcune importanti novità in casa Genropy, riguardanti il mondo dei controllers collegati a bottoni, lightbuttons e menuline.

Fino a questo momento, infatti, i bottoni potevano, tramite la action, specificare direttamente l’azione da eseguire e contenere tutti i parametri necessari, ma questa eventualità poco si adatta ad azioni complesse con tanti parametri, e inoltre rischia di generare confusione in merito alle modalità applicative nonché un codice “non pulito”. Una prima possibilità a nostra disposizione per far fronte a questo tipo di situazione era di innescare invece con la action un dataController tramite l’attributo “_fired” o tramite il meccanismo publish/subscribe: in questo modo è possibile separare chiaramente l’oggetto chiamante (il bottone) e l’azione chiamata, che si può andare ad arricchire anche in modo complesso con i parametri necessari.

Ma non sarebbe bello invece collegare un controller al suo oggetto di innesco in un modo più semplice, magari innestando l’uno all’interno dell’altro? Grazie a questo aggiornamento di Genropy, da oggi questo sarà possibile.

Da oggi sarà quindi possibile innestare un dataController in un bottone o menuline:

fb.textbox('^.name', lbl='Name') 
btn = fb.button('Hi') 
btn.dataController("alert('Hi ' + name)", name='=.name')

Oppure, analogamente, una dataRpc in un bottone o menuline:

menu = pane.menudiv(iconClass='iconbox menu_icon')
line = menu.menuline('Download Bag')
line.dataRpc(None, self.buildBag)

In questo modo quindi la sintassi viene estremamente semplificata, rendendo superfluo l’innesco con l’attributo “_fired” o tramite il meccanismo publish/subscribe. Inoltre, il bottone rimane separato dall’azione e non viene appesantito con parametri “non propriamente suoi”.

Questa sintassi è valida per tutti i controller (dataController, dataRpc, dataFormula) collegati a widget di tipo bottone (button e lightbutton) o menuline.

Sempre in quest’ottica, il parametro ask, che permetteva all’interno del bottone di mostrare una finestra di dialogo per richiedere all’utente dei parametri aggiuntivi necessari all’azione da eseguire, è stato “spostato” anche questo nel controller, che adesso può richiedere un parametro _ask:

btn = fb.button('How many days left to your birthday?') 
btn.dataRpc('.days_left', self.getTime, _ask=dict(title='When is your next birthday?', fields=[dict(name='birthday', tag='datetextbox', lbl='Date')])) 
fb.div('^.days_left', lbl='Days left')

Infine, per quanto riguarda le dataRpc, non sarà più obbligatorio passare come primo parametro un path di destinazione, ma sarà possibile passare direttamente il metodo callable:

btn.dataRpc(self.buildBag)

Il primo parametro era stato già reso facoltativo, in quanto era possibile inserire come valore None, ma questa tendenza è stata ulteriormente rafforzata dando la possibilità di ometterlo del tutto.

Insomma, con queste novità speriamo di aver semplificato non poco il lavoro di chi utilizza il nostro framework, e averlo reso ancora più chiaro per chi invece si sta approcciando ad esso da poco. Ti piace la novità? Hai ulteriori suggerimenti da darci? Condividi la tua esperienza con noi sul Gruppo AskGenropy!