[inhalt]
Projekt BISO 3 - Handbuch

Globale Stores, globales Store-Reloading via KP.controller.Stores

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:

Stores werfen globalen Event 'kpwrite' on write

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.

Abfangen der globalen Store-Events in KP.controller.Stores

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();
        }
     }
 });