Discourse.SiteSettings からの移行:アップグレードガイド

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 に非推奨警告を追加していません。まだ更新されていない既存のテーマやプラグインが多いため、警告が多すぎて実際には役に立たないと考えているからです。該当するコードの大部分が更新された段階で、警告を追加して検出しやすくする予定です。

「いいね!」 31