Sto riscontrando alcuni problemi nell'inserire iframe utilizzando l'API Ember di Discourse

Ecco alcuni suggerimenti:

  • Le impostazioni del sito sono state spostate in un servizio:

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

  • afterRender().then(() => onAfterRender(container));
    afterRender è un decoratore che si applica sopra un metodo in una classe di componente; non dovresti usarlo direttamente come funzione.
    Credo che tu voglia (non sembra essere necessario), forse:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • Hai un grosso pezzo di codice fuori dalla funzione composeStateChanged, a quanto pare.
    Inoltre, puoi usare il servizio router qui: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • L’header è stato modernizzato. La personalizzazione nel widget home-logo è deprecata nel tuo contesto. Maggiori informazioni qui: Upcoming Header Changes - Preparing Themes and Plugins.
    Nel tuo caso, dovrai impostare glimmer header mode su auto o enabled. Quindi, puoi usare un plugin outlet per sostituire il contenuto:

    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>`);
    

    Nota: per utilizzare la sintassi template di glimmer, assicurati di rinominare l’estensione del file in .gjs.
    Puoi anche usare questo modo:

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

    Per cambiare l’URL:

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

    Nota: credo che il codice per il re-rendering in setLogo non funzionerà su un componente glimmer.

    Nota dopo il test: Tuttavia, nessuna delle due soluzioni funzionerà perché l’header viene renderizzato prima che tu possa ottenere i loghi dal JSON. Non ho una soluzione pronta per questo. Non sono sicuro se ci sia un modo migliore: sposterei il caricamento del JSON in un servizio e ne traccerei il risultato. Quindi, userei il plugin outlet sopra con un componente glimmer. In questo modo, basandoti su una variabile di tracciamento, puoi attivare automaticamente un aggiornamento del componente.

    Con questo, in qualche modo funziona. Non ci sono ancora pezzi funzionanti come il composer. Non ci ho guardato troppo a fondo. Almeno, non ci sono più errori bloccanti. :slightly_smiling_face:

    Spero che questo aiuti.

3 Mi Piace