# 资源仅对 SCSS 可用，而非 JS

**URL:** <https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231>\
**Category:** Development\
**Created:** [2020年四月16日 11:59 UTC](https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231 "2020-04-16T11:59:43Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![hakonbja](https://avatars.discourse-cdn.com/v4/letter/h/76d3ee/32.png) [@hakonbja](https://meta.discourse.org/u/hakonbja)\
**Post date:** [2020年四月16日 11:59 UTC](https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231/1 "2020-04-16T11:59:43Z")

</div>

你好，

过去一周左右，我一直在为一个品牌定制 Discourse 设置，包括固定字体、徽标和图标。

起初我注意到，任何我导入的资源（放入 assets 文件夹并在 `about.json` 的 `assets` 对象下导入）都会立即作为 SCSS 变量可用，但需要一两分钟才会出现在 `settings.theme_uploads` 中。

但现在，它们根本不会出现在 `settings.theme_uploads` 中，这意味着我无法在 JavaScript 中使用它们。如果我删除某个资源，它仍然会保留在设置对象中。SCSS 的使用不受影响。

非常感谢您的帮助。

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2021年十二月16日 10:21 UTC](https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231/2 "2021-12-16T10:21:53Z")

</div>

是的，我也对这个问题有点困惑。

什么时候可以在 JavaScript 中安全地使用诸如 `return settings.theme_uploads.blah` 这样的引用，如果可以的话？

在我的计算属性中，我得到 `settings.theme_uploads` 为“undefined”（至少一开始是这样）。

这里的正确模式是什么？

---

<div class="post-metadata">

**Author:** ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)\
**Post date:** [2021年十二月16日 10:24 UTC](https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231/3 "2021-12-16T10:24:00Z")

</div>

`settings.theme_uploads` 数据是最近才添加到 javascript 中的（我认为是在 OP 编写之后）。它应该是可靠的——我们在自己的主题/组件中也使用它。你能更详细地解释一下你遇到的问题吗？

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2021年十二月16日 10:27 UTC](https://meta.discourse.org/t/assets-only-available-to-scss-not-js/148231/4 "2021-12-16T10:27:02Z")

</div>

Ah, I was missing the assets folder in my path to the asset, so the broken link had “optimised out” the asset no doubt:

```plaintext
{
  "name": "Cool Theme Component",
  "about_url": "",
  "component": true,
  "assets": {
    "background": "background.png"
  }
}

```

should have been:

```plaintext
{
  "name": "Cool Theme Component",
  "about_url": "",
  "component": true,
  "assets": {
    "background": "assets/background.png"
  }
}

```

Doh!

FYI I’m reference this in Javascript in an Ember Component, e.g.:

```plaintext
  @computed
  backgroundImage() {
    return settings.theme_uploads.background;
  }

```

That would raise an `undefined` error when the path is incorrect!

Thanks for listening! @david, sorry to waste your time.

@hakonbja did you solve your issue?
