¿Variable rastreada no encontrada?

Este es mi código:

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'; // Se usa 'lock' como alternativa si la configuración no está definida
  @tracked lockIcon = iconNode(this.iconName);

Frustrantemente, la consola del navegador me dice que ReferenceError: iconName is not defined. Mirando el archivo en las herramientas de desarrollo del navegador, así es como se ve:

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

Esto, comparado con otro componente que hice que usa variables rastreadas (y que funciona):

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

, donde el código original es

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

¿Estoy haciendo algo mal?

No es necesario hacer un seguimiento de estos. Serán constantes, por lo que son innecesarios. Utiliza DIcon en su lugar.

1 me gusta

Ya veo. Gracias por la ayuda; lo probaré.

2 Me gusta

Cada vez que rastreas, utilizas recursos, así que mantenlo al mínimo. No es un gran problema, pero es una buena práctica no rastrear si algo no va a cambiar durante una visita a la página. Estoy seguro de que puedes esperar una actualización de la página entre los cambios de configuración.

3 Me gusta

¡Gracias por el consejo! Lo tendré en cuenta.

1 me gusta

Hola @merefield, no consigo entender cómo superar esta función:

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

¿Algún consejo sobre cómo podría devolver esto? Dado que esto está en un archivo .gjs, ¿es posible devolver

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

?

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