在 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指向正确:QUnit.test("test something", function(assert) { this.siteSettings; // 将生效 }); QUnit.test("test something", assert => { this.siteSettings; // 将不生效 });在大多数情况下,您应该能够将
assert => {替换为function(assert) {,这样就能正常工作。 -
如果您的代码位于 helper 中,有一个新函数
helperContext(),您可以导入并使用它在 helper 函数中获取站点设置。请仅在真正的 helper 中使用此功能!import { helperContext } from "discourse-common/lib/helpers"; function myHelper(x) { let siteSettings = helperContext().siteSettings; } -
如果您通过 script 标签嵌入 Discourse 代码,可以通过容器访问站点设置:
<script type="text/discourse-plugin" version="0.1"> let siteSettings = api.container.lookup('site-settings:main'); </script>
我尚未为 Discourse.SiteSettings 添加弃用警告,因为我认为目前由于存在大量尚未更新的现有主题和插件,警告数量过多,反而无法提供实际帮助。一旦大部分相关代码完成更新,我将添加这些警告,以便更容易发现问题。