Avoir quelques problèmes avec l'insertion d'iframes en utilisant l'API Ember de Discourse

Voici quelques points :

  • Les paramètres du site ont été déplacés vers un service :

    const siteSettings = container.lookup('service:site-settings');
    if (!siteSettings.docuss_enabled) {
      return;
    }
    
  • location:discourse-locationlocation:history

  • afterRender().then(() => onAfterRender(container));
    afterRender est un décorateur que vous placez au-dessus d’une méthode dans une classe de composant ; vous ne devez pas l’utiliser directement comme une fonction.
    Je pense que vous voulez (cela ne semble pas nécessaire), éventuellement :

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • Vous avez un gros morceau de code en dehors de la fonction composeStateChanged, semble-t-il.
    De plus, vous pouvez utiliser le service de routage ici : container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • L’en-tête a été modernisé. La personnalisation dans le widget home-logo est dépréciée dans votre contexte. Plus d’informations ici : Upcoming Header Changes - Preparing Themes and Plugins.
    Dans votre cas, vous devrez définir le glimmer header mode sur auto ou enabled. Ensuite, vous pouvez utiliser une sortie de plugin pour remplacer le contenu :

    api.renderInOutlet("home-logo-contents", `<template>
      <HomeLogoContents
        @logoSmallUrl={{container.dcsHeaderLogo._smallLogoUrl}}
        @logoUrl={{container.dcsHeaderLogo._logoUrl}}
        @minimized={{@outletArgs.minimized}}
        @mobileLogoUrl={{container.dcsHeaderLogo._mobileLogoUrl}}
        @showMobileLogo={{@outletArgs.showMobileLogo}}
        @title={{@outletArgs.title}}
      />
    </template>`);
    

    Remarque : pour utiliser la syntaxe template de glimmer, assurez-vous de renommer l’extension du fichier en .gjs.
    Vous pouvez également utiliser cette méthode :

     api.registerValueTransformer("home-logo-image-url", (transformer) => {
        let url = transformer.value;
        if (transformer.context.name === 'logo') {
          url = container.dcsHeaderLogo._logoUrl;
        } else if (transformer.context.name === 'logo_small') {
          url = container.dcsHeaderLogo._smallLogoUrl;
        } else if (transformer.context.name === 'logo_mobile') {
          url = container.dcsHeaderLogo._mobileLogoUrl;
        }
        return url;
      });
    

    Pour changer l’URL :

    api.registerValueTransformer("home-logo-href", () => container.dcsHeaderLogo._href);
    

    Remarque : je pense que le code pour ré-rendre dans setLogo ne fonctionnera pas sur un composant glimmer.

    Remarque après test : cependant, aucune des deux solutions ne fonctionnera car l’en-tête est rendu avant que vous ne puissiez obtenir les logos du JSON. Je n’ai pas de solution prête pour cela. Je ne suis pas sûr s’il existe une meilleure façon : je déplacerais le chargement du JSON vers un service et suivrais le résultat. Ensuite, utilisez la sortie de plugin ci-dessus avec un composant glimmer. De cette façon, en fonction d’une variable de suivi, vous pouvez déclencher automatiquement une mise à jour du composant.

    Avec cela, cela fonctionne plus ou moins. Il n’y a toujours pas de pièces fonctionnelles comme le compositeur. Je n’ai pas regardé trop en profondeur. Au moins, il n’y a plus d’erreur bloquante. :slightly_smiling_face:

    J’espère que cela vous aidera.

3 « J'aime »