In den neuesten Versionen von Discourse haben wir Discourse.SiteSettings vollständig aus der JavaScript-Anwendung entfernt. Die einzigen Stellen, an denen Sie es noch finden, dienen der Abwärtskompatibilität.
Wir tun dies im Rahmen unserer Migration zu Ember CLI, aber auch, weil es das Richtige ist: Discourse.XYZ ist im Wesentlichen eine globale Variable, was bedeutet, dass unsere Abhängigkeiten überall verteilt sind.
Wenn Sie ein Plugin- oder Theme-Entwickler sind und Discourse.SiteSettings in Ihrem Code verwenden, ist jetzt der richtige Zeitpunkt, um über eine Migration nachzudenken.
So aktualisieren Sie Ihren JavaScript-Code:
-
Wenn Ihr Verweis auf einen Controller, eine Route, ein Model, eine Komponente oder ein Widget zutrifft, können Sie stattdessen
this.siteSettingsverwenden. -
Wenn sich Ihre Datei in einem Initialisierer befindet, können Sie die Site-Einstellungen über den Container-Parameter nachschlagen:
let siteSettings = container.lookup('site-settings:main'); -
Wenn Ihre Datei ein QUnit-Test ist, können Sie
this.siteSettingsverwenden, aber ACHTUNG: Ihre Testmethode muss eine echte Funktion und keine Arrow-Funktion sein, damitthiskorrekt funktioniert:QUnit.test("etwas testen", function(assert) { this.siteSettings; // funktioniert }); QUnit.test("etwas testen", assert => { this.siteSettings; // funktioniert NICHT });In den meisten Fällen sollten Sie
assert => {durchfunction(assert) {ersetzen können, und es wird einwandfrei funktionieren. -
Wenn sich Ihr Code in einem Helper befindet, gibt es eine neue Funktion
helperContext(), die Sie importieren und verwenden können, um die Site-Einstellungen in Ihrer Helper-Funktion zu erhalten. Bitte verwenden Sie dies nur in echten Helpers!import { helperContext } from "discourse-common/lib/helpers"; function myHelper(x) { let siteSettings = helperContext().siteSettings; } -
Wenn Sie Discourse-Code über ein Script-Tag einbetten, können Sie über den Container auf die Site-Einstellungen zugreifen:
<script type="text/discourse-plugin" version="0.1"> let siteSettings = api.container.lookup('site-settings:main'); </script>
Ich habe noch keine Deprecation-Warnungen für Discourse.SiteSettings hinzugefügt, da ich der Meinung bin, dass es derzeit zu viele Warnungen gäbe, die aufgrund aller noch nicht aktualisierten bestehenden Themes und Plugins tatsächlich nutzlos wären. Sobald ein erheblicher Teil dieses Codes aktualisiert wurde, werde ich die Warnungen hinzufügen, um sie leichter auffindbar zu machen.