Discourse の最新リリースでは、JavaScript アプリケーションから Discourse.SiteSettings を完全に削除しました。現在、それが見つかるのは後方互換性のための場所のみです。
これは Ember CLI への移行の一環として行っていますが、それだけでなく、正しい対応でもあります。Discourse.XYZ は本質的にグローバル変数であり、依存関係が散在してしまうからです。
プラグインやテーマの開発者で、コード内で Discourse.SiteSettings を使用している場合は、今こそ移行について検討し始める時です。
JavaScript コードの更新方法:
-
コントローラー、ルート、モデル、コンポーネント、ウィジェットを参照している場合は、代わりに
this.siteSettingsを使用できます。 -
ファイルがイニシャライザーにある場合は、コンテナパラメータを使用してサイト設定を検索できます:
let siteSettings = container.lookup('site-settings:main'); -
ファイルが QUnit テストの場合は
this.siteSettingsを使用できますが、注意点として、thisが正しく機能するためには、テストメソッドはアロー関数ではなく通常の関数である必要があります:QUnit.test("test something", function(assert) { this.siteSettings; // 動作します }); QUnit.test("test something", assert => { this.siteSettings; // 動作しません });ほとんどの場合、
assert => {をfunction(assert) {に置き換えるだけで正しく動作します。 -
コードがヘルパーにある場合は、新しい関数
helperContext()をインポートしてヘルパー関数内でサイト設定を取得できます。実際のヘルパーでのみ使用してください!import { helperContext } from "discourse-common/lib/helpers"; function myHelper(x) { let siteSettings = helperContext().siteSettings; } -
スクリプトタグを通じて Discourse のコードを埋め込んでいる場合は、コンテナを介してサイト設定にアクセスできます:
<script type="text/discourse-plugin" version="0.1"> let siteSettings = api.container.lookup('site-settings:main'); </script>
現在、Discourse.SiteSettings に非推奨警告を追加していません。まだ更新されていない既存のテーマやプラグインが多いため、警告が多すぎて実際には役に立たないと考えているからです。該当するコードの大部分が更新された段階で、警告を追加して検出しやすくする予定です。