====== Ext.data.DirectStore e Ext.Record ======
Secondo la documentazione di ExtJS per creare un Ext.data.DirectStore è necessario passare la configurazione //fields// che verrà poi internamente utilizzata per istanziare il Ext.data.JsonRecord associato allo store. Il parametro fields contiene, come suggerisce il nome, la definizione dei Ext.data.Field che verranno costruiti a partire dal Json ricevuto dal server. Il formato degli oggetti è esattamente lo stesso che viene utilizzato come parametro del metodo statico Ext.data.Record.create per ottenere un costruttore custom per le nostre entità.
var movieStore = new Ext.data.DirectStore({
[...],
fields: [
{ name: 'title', type:'string' },
{ name: 'year', type:'int' },
{ name: 'director', type:'string' },
{ name: 'summary', type:'string' },
{ name: 'rate', type:'int' }
]
});
Spesso capita però che la nostra entità venga già definita a livello globale nell'applicazione (magari incapsulata dento un package). Per non ripetere l'elenco dei campi due volte (in un ottica DRY) è possibile comunicare allo store la definizione dei campi in maniera dinamica partendo dal costruttore dell'entità in questione.
var Movie = Ext.data.Record.create([
{ name: 'title', type:'string' },
{ name: 'year', type:'int' },
{ name: 'director', type:'string' },
{ name: 'summary', type:'string' },
{ name: 'rate', type:'int' }
]);
var movieStore = new Ext.data.DirectStore({
[...],
fields: Movie.prototype.fields.items
});
Molto meglio no?