In questo breve articolo (ultimo facente della prima sezione introduttiva e teorica su ExtJs) introdurremo un insieme di funzionalità che Ext porta con sé che estendono il linguaggio JavaScript permettendo sia agli sviluppatori di Ext sia a noi di ovviare ad alcune mancanze del linguaggio base.
Queste utilità si differenziano in due grandi gruppi: funzionalità strettamente collegate ad una determinata classe JavaScript (come ad esempio le funzioni per la formattazione di una data o per l'alterazione del comportamento di una funzione) e funzionalità più generiche come ad esempio la possibilità di estendere classi e componenti di ExtJs o di identificare il browser utilizzato dall'utente.
La prima serie di funzioni rappresenta una vera e propria estensione al linguaggio base in quanto queste ultime vengono, grazie alla dinamicità di JavaScript, incorporate all'interno delle classi native come ad esempio Date
, Function
, Array
mentre il secondo gruppo appartiene più strettamente al framework tant'è che le sue funzionalità possono essere utilizzate accedendo staticamente all'oggetto Ext
.
L'oggetto Ext
L'oggetto Ext
espone una serie di funzioni e proprietà che possono facilitare lo sviluppo di componenti personalizzati. Le proprie funzionalità possono essere raggruppate in gruppi:
- browser sniffing: proprietà di tipo
is*
che permettono di identificare il tipo di browser e di sistema operativo utilizzato dal client (Ext.isWindows
,Ext.isLinux
,Ext.isOpera
,Ext.isStrict
, etc...); - iterative: metodi che permettono di velocizzare la scrittura operazioni ripetitive (
Ext.apply
,Ext.applyIf()
,Ext.clean()
,Ext.copyTo()
,Ext.each()
,Ext.invoke()
,Ext.iterate()
, etc...); - introspezione: metodi che permettono di identificare il tipo di dato passato come parametro (
Ext.isArray()
,Ext.isDefined()
,Ext.isEmpty()
,Ext.isObject()
,Ext.isPrimitive()
, etc...); - shorthand: metodi che hanno una funzionalità di "scorciatoia" per accedere a metodi o proprietà di comune utilizzo ed esposti dall'oggetto
Ext
per un utilizzo più rapido (Ext.encode()
,Ext.getCmp()
,Ext.preg()
,Ext.reg()
, etc...); - object-orientation: metodi che permettono di utilizzare la metodologia di sviluppo Object Oriented non implementata ottimamente nelle specifiche del linguaggio base (
Ext.override()
,Ext.extend()
,Ext.ns()
, etc...).
Il miglior modo per approfondire queste funzioni e il loro utilizzo rimane la documentazione ufficiale del framework.
Le estensioni a JavaScript
Oltre a definire l'oggetto Ext
, il framework implementa alcune funzionalità di base (spesso quasi vitali e stranamente non presenti) iniettandole direttamente nella classe di riferimento. Grazie ad ExtJs avremo per esempio a disposizione metodi (spesso ritenuti ovvi in altri linguaggi di programmazione) come String.trim()
, Array.indexOf()
e Array.remove()
.
Gli sviluppatori hanno però puntato l'attenzione sulle estensioni di due particolari oggetti cari agli sviluppato di JavasScript: Date
e Function
. Per i più curiosi rimando, come prassi, alla documentazione ufficiale.
Le nuove API di Date
L'oggetto Date
ha sempre rappresentato un ostacolo per tutti gli sviluppatori JavaScript per la sua poca coerenza, poca documentazione e scarsità di metodi esposti. Gli sviluppatori di ExtJs hanno davvero fatto un ottimo lavoro in questo senso perchè sono riusciti a implementare praticamente qualsiasi tipo di funzione possa essere richiamata partendo da un oggetto Date
.
Grazie a questa estensione è infatti possibile:
- formattare (da
Date
aString
) e parsare (daString
aDate
) le date (sfruttando la sintassi per il pattern di formattazione utilizzata in PHP); - eseguire calcoli e controlli sulle date (
add
,remove
,between
, etc...) - ottenere informazioni spesso difficili da calcolare (
isLeapYear()
,getLastDateOfMonth()
,etc.
Le nuove API di Function
Grazie a questo set di estensioni è possibile controllare il normale flusso di esecuzione delle funzioni da noi definite. Queste API nonostante possano inizialmente sembrare banali e inutili, hanno un'importanza vitale in architetture di notevole dimensione. Ecco l'elenco dei metodi esposti:
- callback(args): permette di modificare il normale comportamento di una funzione forzandone i parametri di chiamata. Spesso è utile per definire alcune funzioni come callback di eventi;
- createDelegate(scope, args, appendArgs): permette di modificare il normale comportamento di una funzione modificandone lo scope di esecuzione (fondamentale in architetture orientate agli oggetti) e i parametri di chiamata;
- defer(millis,scope, args, appendArgs): permette di posticipare l'esecuzione di una funzione;
- createSequence(function, scope): permette di creare una coda di chiamate composta (in ordine) dalla funzione invocante e dalla funzione passata come parametro;
- createInterceptor(function,scope): permette di creare una coda di chiamate composta (in ordine) dalla funzione passata come parametro e dalla funzione invocante.