Variável rastreada não encontrada?

Este é o meu 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'; // Retorno para 'lock' se a configuração não estiver definida
  @tracked lockIcon = iconNode(this.iconName);

Frustrantemente, o console do navegador me diz que ReferenceError: iconName is not defined. Olhando o arquivo nas ferramentas de desenvolvedor do navegador, é assim que ele se parece:

iconName = settings.category_lock_icon || 'lock'; // Retorno para 'lock' se a configuração não estiver definida
lockIcon = (0, _iconLibrary.iconNode)((void 0).iconName);

Isso, comparado a outro componente que fiz que usa variáveis rastreadas (e que funciona):

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

, onde o código original é

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

Estou fazendo algo errado?

Não é necessário rastrear estes. Eles serão constantes, portanto, desnecessários.

Use DIcon em vez disso.

1 curtida

Entendi. Obrigado pela ajuda; vou experimentar.

2 curtidas

Toda vez que você rastreia, você usa recursos, então mantenha isso no mínimo. Não é um grande problema, mas é uma boa prática não rastrear se algo não for mudar durante uma visita à página. Tenho certeza de que você pode esperar uma atualização de página entre as mudanças de configuração.

3 curtidas

Obrigado(a) pelo conselho! Vou ter isso em mente.

1 curtida

Olá @merefield, não consigo avançar com esta função:

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

Alguma dica de como eu retornaria isso? Já que isso está em um arquivo .gjs, é possível retornar

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

?

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