跟踪变量未找到?

这是我的代码:

import { apiInitializer } from "discourse/lib/api";
import { iconNode } from "discourse-common/lib/icon-library";
import { tracked } from "@glimmer/tracking";

export default apiInitializer((api) =
> {
  @tracked iconName = settings.category_lock_icon || 'lock'; // Fallback to 'lock' if setting is not defined
  @tracked lockIcon = iconNode(this.iconName);

令人沮丧的是,浏览器控制台告诉我 ReferenceError: iconName is not defined。在浏览器开发工具中查看文件,它看起来是这样的:

iconName = settings.category_lock_icon || 'lock'; // Fallback to 'lock' if setting is not defined
lockIcon = (0, _iconLibrary.iconNode)((void 0).iconName);

与我制作的另一个使用 tracked 变量的组件(它能正常工作)相比:

#buttonIcon = (() =
> (dt7948.i(this, "buttonIcon"), void 0))();

,其中原始代码是

@tracked buttonIcon = localStorage.getItem('buttonIcon') != null ? localStorage.getItem('buttonIcon') : "bug";

我做错什么了吗?

您无需跟踪这些。它们将是常量,因此没有必要。请改用 DIcon。

1 个赞

我明白了。谢谢你的帮助;我会试试的。

2 个赞

每次跟踪都会消耗资源,因此请尽量减少跟踪。这不是什么大问题,但如果某个内容在页面访问期间不会改变,那么不进行跟踪是一个好习惯。

我相信您可以预期在设置更改之间会进行一次页面刷新。

3 个赞

谢谢您的建议!我会记住的。

1 个赞

你好 @merefield ,我似乎无法理解如何处理这个函数:

function ifProtected() {
  if(category.read_restricted) {
    return this.lockIcon;
  }
}

关于如何返回它,你有什么建议吗?由于这在一个 .gjs 文件中,是否可以返回

return <template>{{icon this.iconName}}</template>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.