20100805¶
Abends¶
19.20 Uhr : Wie gut, dass man manchmal gegen seinen Willen aus der Arbeit rausgerissen wird! Bei der Unterbrechung ist mir aufgefallen, dass es Quatsch ist, die Grid-Konfigurationen in der Datenbank zu speichern; die müssen in schlichten Textdateien auf dem Server liegen! Also system.GridConfig und system.GridColumn kommen wieder raus. Stattdessen wird Report.grid_configs
in Report.do_setup()
gefüllt, indem er nach einer Datei contacts.Persons.config.js
sucht. Für den Anfang dürfte eine Datei pro Report reichen, die alle GC’s dieses Reports enthält. Die Datei wird vom Server generiert und könnte (z.B. für countries.Countries) ungefähr folgenden Inhalt haben:
[
{ name: '',
columns:[
[90, 'isocode','ASC',''],
[150, 'name','',''],
[90, 'short_code','','']
]
},
{ name: 'by_name',
columns:[
[150, 'name','ASC',''],
[90, 'isocode','',''],
[90, 'short_code','','']
]
},
{ name: 'only short_code',
columns:[
[90, 'short_code','ASC','isnull',false],
[90, 'isocode','','',''],
[150, 'name','','','']
]
}
Also eine relativ kompakte Liste von Objekten (eines pro GC). Jede GC hat einen Namen und eine Liste von Kolonnen. Jede Kolonne ist ein Array mit folgenden Feldern:
width (http://www.sencha.com/deploy/dev/docs/?class=Ext.grid.Column.width)
dataIndex (http://www.sencha.com/deploy/dev/docs/?class=Ext.grid.Column.dataIndex)
sortDirection (http://www.sencha.com/deploy/dev/docs/?class=Ext.data.Store.sortInfo)
filter_operator
filter_value
Für filter_operator begnügen wir uns fürs erste mit Djangos field lookup operators:
exact
contains
gt
gte
lt
lte
startswith
endswith
year
month
day
week_day
in Liste mit beliebig vielen Werten
range Liste mit 2 Werten
isnull true/false
Das UI muss also wissen, welche Operatoren mit welchen Datentypen erlaubt sind und was sie als filter_value brauchen.
Aber bevor ich auf der Serverseite weiter ins Detail gehe, sollte ich wohl besser Ext.ux.grid.GridFilters anschauen.
0.30 Uhr. Dieses Plugin ist super! Obwohl ich zuerst mal anderthalb Stunden lang einen Bug suchen musste.
(Ich habe in meinen Kolonnen einfach nur filterable:true
konfiguriert.
Laut Doku und auch laut Source (GridFilters.addFilters()
in examples/ux/gridfilters/GridFilters.js
)
müsste das klappen, er findet dann den Datentyp selber raus, indem er in den Store schaut.
Aber er findet trotzdem für type statt eines Strings (z.B. 'auto'
) ein Objekt {type:'auto'}
.
Tilt: Der GridFilters-Plugin verträgt keine http://www.sencha.com/deploy/dev/docs/?class=Ext.data.Types!
Ende gut, alles gut, nachdem die Erklärung gefunden habe, musste ich das natürlich noch ins
Forum mitteilen.
Aber jetzt ist erstmal Feierabend!