Alejándose de Discourse.SiteSettings: Una guía de actualización

En las versiones más recientes de Discourse, hemos eliminado por completo Discourse.SiteSettings de la aplicación de JavaScript. Los únicos lugares donde lo encontrarás son por compatibilidad con versiones anteriores.

Estamos haciendo esto como parte de nuestra migración a Ember CLI, pero también porque es lo correcto: Discourse.XYZ es esencialmente una variable global, lo que significa que nuestras dependencias están dispersas por todas partes.

Si eres un desarrollador de plugins o temas y usas Discourse.SiteSettings en tu código, ahora es el momento de comenzar a pensar en migrar.

Cómo actualizar tu código JavaScript:

  • Si tu referencia es un Controlador, Ruta, Modelo, Componente o Widget, puedes usar this.siteSettings en su lugar.

  • Si tu archivo está en un inicializador, puedes buscar la configuración del sitio usando el parámetro del contenedor: let siteSettings = container.lookup('site-settings:main');

  • Si tu archivo es una prueba de QUnit, puedes usar this.siteSettings, pero NOTA que tu método de prueba debe ser una función adecuada y no una función flecha para que this sea correcto:

    QUnit.test("test something", function(assert) { 
      this.siteSettings; // funcionará
    });
    
    QUnit.test("test something", assert => { 
      this.siteSettings; // NO funcionará
    });
    

    En la mayoría de los casos, deberías poder reemplazar assert => { con function(assert) { y funcionará correctamente.

  • Si tu código está en un helper, hay una nueva función helperContext() que puedes importar y usar para obtener la configuración del sitio en tu función de helper. ¡Por favor, úsala solo en helpers reales!

    import { helperContext } from "discourse-common/lib/helpers";
    
    function myHelper(x) {
       let siteSettings = helperContext().siteSettings;
    }
    
  • Si estás incrustando código de Discourse mediante una etiqueta de script, puedes acceder a la configuración del sitio a través del contenedor:

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

Aún no he añadido advertencias de obsolescencia a Discourse.SiteSettings porque creo que, por ahora, habría demasiadas advertencias para ser realmente útiles debido a todos los temas y plugins existentes que aún no han sido actualizados. Una vez que una cantidad considerable de ese código haya sido actualizada, añadiré las advertencias para facilitar su detección.

31 Me gusta