Spostamento da Discourse.SiteSettings: una guida all'aggiornamento

Nelle versioni più recenti di Discourse, abbiamo rimosso completamente Discourse.SiteSettings dall’applicazione JavaScript. Gli unici luoghi in cui lo troverete sono per la compatibilità con versioni precedenti.

Stiamo facendo questo come parte della nostra migrazione a Ember CLI, ma anche perché è la cosa giusta da fare: Discourse.XYZ è essenzialmente una variabile globale, il che significa che le nostre dipendenze sono sparse ovunque.

Se sei uno sviluppatore di plugin o temi e usi Discourse.SiteSettings nel tuo codice, è il momento di iniziare a pensare alla migrazione.

Come aggiornare il tuo codice JavaScript:

  • Se il tuo riferimento è un Controller, Route, Model, Component o Widget, puoi usare this.siteSettings invece.

  • Se il tuo file si trova in un inizializzatore, puoi cercare le impostazioni del sito utilizzando il parametro del contenitore: let siteSettings = container.lookup('site-settings:main');.

  • Se il tuo file è un test QUnit, puoi usare this.siteSettings, ma NOTA che il metodo del tuo test dovrà essere una funzione normale e non una funzione freccia in modo che this sia corretto:

    QUnit.test("test something", function(assert) { 
      this.siteSettings; // funzionerà
    });
    
    QUnit.test("test something", assert => { 
      this.siteSettings; // NON funzionerà
    });
    

    Nella maggior parte dei casi dovresti essere in grado di sostituire assert => { con function(assert) { e funzionerà correttamente.

  • Se il tuo codice si trova in un helper, c’è una nuova funzione helperContext() che puoi importare e usare per ottenere le impostazioni del sito nella tua funzione helper. Usala solo negli helper effettivi!

    import { helperContext } from "discourse-common/lib/helpers";
    
    function myHelper(x) {
       let siteSettings = helperContext().siteSettings;
    }
    
  • Se stai incorporando il codice di Discourse tramite un tag script, puoi accedere alle impostazioni del sito tramite il contenitore:

    <script type="text/discourse-plugin" version="0.1">
      let siteSettings = api.container.lookup('site-settings:main');
    </script>
    

Non ho ancora aggiunto avvisi di deprecazione per Discourse.SiteSettings perché penso che al momento ci sarebbero troppi avvisi per essere realmente utili a causa di tutti i temi e i plugin esistenti che non sono stati ancora aggiornati. Una volta aggiornato una quantità considerevole di quel codice, aggiungerò gli avvisi per renderli più facili da rilevare.

31 Mi Piace