In BISO verwenden wir viele Global Stores, also Stores, welche in einer Instanz an mehreren Orten verwendet werden. Dies betrifft mehrheitlich alle Wertelisten-Stores, und die Berater/Regionalstellen-Stores.
Damit nun diese bereits geladenen Stores Änderungen mitbekommen (Beispiel: es wird eine neue Berater-Person erstellt, der Berater-Store müsste also neu laden), haben wir folgenden Mechanismus entwickelt:
In KP.store.Gaia ist folgendes zu finden:
listeners: {
write: function(store, op, eOpts) {
Ext.globalEvents.fireEvent('kpwrite',store);
}
}
Jeder Write auf einem Store löst also einen globalen Event aus.
Die globalen Events werden in KP.controller.Stores abgefangen, und können dann
entsprechend abhängige global Stores neu laden:
Beispiel anhand des Berater-Stores, welcher auf Änderungen der Personen- und Mitarbeiter-Stores hört:
Ext.define('KP.controller.Stores', {
extend: 'Ext.app.Controller',
stores: ['Berater','Regionalstelle'],
init: function() {
this.listen({
global: {
kpwrite: this.onGlobalDataWrite
}
});
},
onGlobalDataWrite: function(obj) {
var className = Ext.getClassName(obj);
if (className === 'KP.store.Mitarbeiter' ||
className === 'KP.store.Person') {
// Wenn Mitarbeiter geändert werden, muss der Berater-
// Store neu geladen werden, um ev. neu erstellt Berater zu laden:
this.getBeraterStore().load();
}
}
});