Переход от Discourse.SiteSettings: руководство по обновлению

В последних выпусках Discourse мы полностью удалили Discourse.SiteSettings из JavaScript-приложения. Единственные места, где вы его встретите, — это для обратной совместимости.

Мы делаем это в рамках нашей миграции на Ember CLI, а также потому, что это правильный шаг: Discourse.XYZ по сути является глобальной переменной, что означает, что наши зависимости разбросаны повсюду.

Если вы разработчик плагинов или тем и используете Discourse.SiteSettings в своём коде, самое время начать думать о миграции.

Как обновить ваш JavaScript-код:

  • Если ваша ссылка относится к Контроллеру, Роуту, Модели, Компоненту или Виджету, вы можете использовать this.siteSettings.

  • Если ваш файл находится в инициализаторе, вы можете получить настройки сайта через параметр контейнера: let siteSettings = container.lookup('site-settings:main');.

  • Если ваш файл содержит тесты QUnit, вы можете использовать this.siteSettings, но ОБРАТИТЕ ВНИМАНИЕ: ваш метод теста должен быть обычной функцией, а не стрелочной функцией, чтобы this работал корректно:

    QUnit.test("тестирование чего-либо", function(assert) { 
      this.siteSettings; // сработает
    });
    
    QUnit.test("тестирование чего-либо", assert => { 
      this.siteSettings; // НЕ сработает
    });
    

    В большинстве случаев вы можете заменить assert => { на function(assert) {, и всё будет работать корректно.

  • Если ваш код находится в хелпере, существует новая функция helperContext(), которую можно импортировать и использовать для получения настроек сайта в вашей функции-хелпере. Пожалуйста, используйте это только в реальных хелперах!

    import { helperContext } from "discourse-common/lib/helpers";
    
    function myHelper(x) {
       let siteSettings = helperContext().siteSettings;
    }
    
  • Если вы встраиваете код Discourse через тег script, вы можете получить доступ к настройкам сайта через контейнер:

    <script type="text/discourse-plugin" version="0.1">
      let siteSettings = api.container.lookup('site-settings:main');
    </script>
    

Я пока не добавил предупреждения об устаревании для Discourse.SiteSettings, потому что считаю, что сейчас их будет слишком много, чтобы они были действительно полезными, из-за всех существующих тем и плагинов, которые ещё не обновлены. Как только значительная часть этого кода будет обновлена, я добавлю предупреждения, чтобы их было легче отловить.

31 лайк