Generische URL zur Benutzer-Abrechnungsseite in Javascript funktioniert nicht

Ich weiß bereits, dass /my/billing/subscriptions ein Weg ist, den aktuellen Benutzer mit seinem eigenen Benutzerprofil zu verknüpfen, insbesondere mit dem Rechnungsbereich, der zu Discourse Subscriptions gehört. Dies scheint jedoch in meinem untenstehenden Code nicht zu funktionieren, speziell im Ausdruck innerhalb der if-Anweisung. Ich versuche nämlich, einen Button nur auf der Rechnungsseite des Benutzers anzuzeigen. Tatsächlich scheint es für keine URL der Form /my zu funktionieren, egal ob es sich um Billing, Einstellungen, Aktivitäten oder etwas anderes handelt. Mache ich etwas falsch? Was sollte ich stattdessen verwenden? (Denken Sie daran: Es funktioniert nur nicht innerhalb der if-Anweisung. Ansonsten funktioniert die Verwendung von /my einwandfrei.)

<script type="text/discourse-plugin" version="0.8">
api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {
    api.onPageChange((url) => {

        if (url === "/my/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

</script>

<script type="text/x-handlebars" data-template-name="/connectors/above-user-profile/back-button">
  {{#if displayCustomHomepage}} 
    <a href="https://mathbymiles.com/my/preferences" class="btn btn-default">
        <span class="d-button-label">
            Zurück zu den Einstellungen!
        </span>
    </a>
  {{/if}}
</script>

Ist das nicht so, weil Nutzer sich nie in /my/*-URLs befinden, da es sich lediglich um eine intelligente Weiterleitung handelt?

Zum Beispiel wird /my/preferences auf /u/falco/preferences weitergeleitet, sodass ich mich nie auf der Seite /my/preferences befinde, damit die if-Bedingung in deinem Code ausgelöst wird.

Ah, du hast recht. Ich verstehe, warum das für ein if unpassend wäre, da es nie wahr sein würde. Was kann ich also stattdessen tun?

Ich habe versucht, stattdessen im if folgendes zu schreiben:

url === "/u/" + user.username + "/billing/subscriptions"

wobei

const user = api.getCurrentUser(),

aber das hat auch nicht funktioniert…

EDIT: Mit console.log habe ich herausgefunden, dass dieser Ansatz im Allgemeinen gut funktioniert. Wenn ich beispielsweise einfach den folgenden Code in ein Skript einfüge:

const user = api.getCurrentUser()
console.log("/u/" + user.username + "/billing/subscriptions")

erhalte ich die gewünschte Ausgabe /u/Miles/billing/subscriptions.

Das Problem tritt jedoch auf, wenn ich versuche, dies innerhalb von setupComponent(args, component) {} unterzubringen. Sobald ich das tue, zeigt console.log nichts mehr an. Ich bin immer noch nicht sicher, was ich falsch mache…

Hast du im setupComponent-Methodenaufruf Zugriff auf das api-Objekt? Ich frage mich, ob das der Grund für deine Probleme ist.

Ich dachte das, weil api.onPageChange(url) bereits vorhanden und einwandfrei ausführbar ist. Beachte bitte, dass ich den Code von hier anpasse, sodass es sehr wahrscheinlich wahr ist, dass ich im setupComponent-Methode Zugriff auf das api-Objekt habe.

Zur weiteren Klärung, hier ist, was ich bisher habe:

Mit dem Code

<script type="text/discourse-plugin" version="0.8">
    const user = api.getCurrentUser();
    console.log("/u/" + user.username + "/billing/subscriptions");

    api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {

    api.onPageChange((url) => {

        if (url === "/u/" + user.username + "/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

Erhalte ich die korrekte Ausgabe /u/Miles/billing/subscriptions in der Konsole. Aber wenn ich folgendes tue:

<script type="text/discourse-plugin" version="0.8">
    

    api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {

    const user = api.getCurrentUser();
    console.log("/u/" + user.username + "/billing/subscriptions");

    api.onPageChange((url) => {

        if (url === "/u/" + user.username + "/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

Gibt es keine Ausgabe zu finden…