최근 Discourse 릴리스에서는 JavaScript 애플리케이션에서 Discourse.SiteSettings를 완전히 제거했습니다. 현재 이 변수를 찾을 수 있는 곳은 하위 호환성을 위해 남겨진 부분뿐입니다.
이는 Ember CLI로의 마이그레이션 작업의 일환으로 진행되고 있으며, 또한 Discourse.XYZ가 사실상 전역 변수이므로 의존성이 여기저기 흩어져 있는 문제를 해결하기 위한 올바른 조치이기도 합니다.
플러그인 또는 테마 개발자로서 코드의 Discourse.SiteSettings를 사용하고 있다면, 이제 이를 대체할 방식으로 마이그레이션을 시작할 때입니다.
JavaScript 코드 업데이트 방법:
-
참조 대상이 Controller, Route, Model, Component 또는 Widget인 경우, 대신
this.siteSettings를 사용할 수 있습니다. -
파일이 이니셜라이저(initializer)에 있는 경우, 컨테이너 파라미터를 사용하여 사이트 설정을 조회할 수 있습니다:
let siteSettings = container.lookup('site-settings:main'); -
파일이 qunit 테스트인 경우,
this.siteSettings를 사용할 수 있지만 주의할 점은this가 올바르게 동작하도록 테스트 메서드가 화살표 함수(arrow function)가 아닌 일반 함수여야 한다는 것입니다:QUnit.test("test something", function(assert) { this.siteSettings; // 동작합니다 }); QUnit.test("test something", assert => { this.siteSettings; // 동작하지 않습니다 });대부분의 경우
assert => {를function(assert) {로 교체하면 정상적으로 동작합니다. -
코드가 헬퍼(helper)에 있는 경우, 헬퍼 함수 내에서 사이트 설정을 가져올 수 있는 새로운 함수
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에 비추천(Deprecation) 경고는 아직 추가하지 않았습니다. 아직 업데이트되지 않은 기존 테마와 플러그인이 많아 경고 메시지가 너무 많이 출력되어 실질적인 도움이 되지 않을 것이라고 판단했기 때문입니다. 해당 코드가 상당 부분 업데이트된 후에는 더 쉽게 발견할 수 있도록 경고 메시지를 추가할 계획입니다.