Aktuelle Ansicht von Modul-Instanz erstellen und wiederherstellen

Um das Plugin Aktuelle Ansicht teilen zur Verfügung zu stellen, sollen die Entwickler festlegen, wie die aktuelle Ansicht einer Modul-Instanz definiert wird und wie man aus dieser Definition die aktuelle Ansicht wiederherstellen kann.

Definition einer Ansicht im Modul

Eine Ansicht kann über eine Modul-Konfiguration, welche dem Modul bei der Initialisierung oder beim Anzeigen vom Modul (showModule) übergeben wird, beschrieben werden. Oder auch durch eine Route, welche zu der aktuellen Ansicht führt. Damit das Plugin Aktuelle Ansicht teilen in dem Modul zur Verfügung gestellt wird, soll die Funktion getCurrentModuleState in der Main-Klasse des Modul definiert werden. Diese Funktion soll ein Objekt zurückgeben, welche entweder die Route zu der aktuellen Ansicht oder die Modul-Konfiguration der aktuellen Ansicht enthält. Die Funktion und der Return-Wert kann wie folgt aussehen:

Ext.define("monitor.view.Main", {
   // ..........
   /**
    * Function should return current state object of this module (JSON)
    * Current state can consist of it's current route or current moduleCfg
    * You can define, what is current state is this function
    * The current state can be process in function this.updateInstance(moduleCfg, route)
    * and restore the current state on client side
    * @returns object {route: "", moduleCfg: {}}
    */
   getCurrentModuleState : function () {
      const currentState = {
         moduleCfg: this.getCurrentState(),
         route: this.getCurrentRoute();
      };
      return currentState;
   },
});

moduleCfg wird als erstes ausgewertet, dann route

Wiederherstellung der aktuellen Ansicht

moduleCfg und route sind bei der Initialisierung als Properties moduleCfg und moduleRoute des Moduls verfügbar. Es bedeutet, man hat in der Funktion initComponent in der Main-Klasse des Modul den Zugriff auf die beiden Variablen. Bei der Aktualisierung der Route, wenn es moduleCfg und route in der Route vorhanden sind, sind sie als Parameter in der Funktion updateInstance(moduleCfg, route) empfangen. Um die aktuelle Ansicht anhand der URL wiederherzustellen, soll man moduleCfg oder route in der Funktion initComponent oder updateInstance auswerten. Üblicherweise werden moduleCfg oder route in updateInstance ausgewertet, bei der Initialisierung wird diese Funktion in der initComponent ein mal aufgerufen. Damit muss der Code der Auswertung zur Wiederherstellung der aktuellen Ansicht nicht wiederholt werden.

Beispiel
Ext.define("monitor.view.Main", {
   // .........

   initComponent : function () {
      // .........
      this.callParent();
      this.updateInstance(this.moduleCfg, this.moduleRoute);
   },

   updateInstance : (moduleCfg, moduleRoute) {
      // .........
   },
   /**
    * Function should return current state object of this module (JSON)
    * Current state can consist of it's current route or current moduleCfg
    * You can define, what is current state is this function
    * The current state can be process in function this.updateInstance(moduleCfg, route)
    * and restore the current state on client side
    * @returns object {route: "", moduleCfg: {}}
    */
   getCurrentModuleState : function () {
      const currentState = {
         moduleCfg: this.getCurrentState(),
         route: this.getCurrentRoute();
      };
      return currentState;
   },
});