Problemas ao sobrescrever getters em um controller (3.0.0)

Tenho este código no meu inicializador, ele está tentando substituir o getter de allAdminRoutes:

    api.modifyClass('controller:admin-plugins', {
      pluginId: PLUGIN_ID,

      get allAdminRoutes() {
        return this.model
          .filter(p => p?.enabled)
          .map(p => {
            return p.admin_route;
          })
          .filter(Boolean);
      },
    });

Está falhando com:

TypeError: this.model is undefined

Agora, eu não me importaria, mas é apenas o código original do getter (ainda não o alterei!)

O que estou perdendo? Substituir um getter dessa forma não é suportado ou introduz algum tipo de problema de escopo?

4 curtidas

Estranhamente, isso não parece ser um problema com a versão mais recente. (Isso foi apenas um teste em Produção.)

Vou ver se consigo reproduzir em uma versão estável 3.0.0 limpa.

1 curtida

O exemplo deve funcionar, e não estou ciente de nenhuma alteração relevante entre a versão estável e agora. Informe-nos se conseguir reproduzir o problema!

1 curtida

Obrigado, David. Farei isso. Sim, notei isso. A bola está definitivamente do meu lado por enquanto, já que o ambiente em que experimentei isso não estava totalmente limpo.

1 curtida

OK David, parece (e isso é estranho):

  • funciona em Produção
  • falha em Desenvolvimento 3.0.0 em diante (possivelmente antes)
  • Testei em um ambiente de Desenvolvimento sem Docker e também em um ambiente de desenvolvimento Docker personalizado muito limpo (mas possivelmente com configuração incompleta).

Aqui estão os erros:

Erro ocorreu:

- Ao renderizar:
  -nível superior
    aplicativo
      discourse-root
        sidebar-wrapper
          admin
            admin-wrapper
              nav-item
                link-to
                  -link-to
Uncaught (in promise) TypeError: Ao gerar link para a rota "adminPlugins": this.model is undefined
    get allAdminRoutes admin-plugins.js:20

note que posso colocar uma instrução de depuração antes de return this.model e o depurador nunca é acionado.

@RGJ também gentilmente analisou isso e pode reproduzir este resultado.

Isso é um pouco problemático, pois claramente precisamos desenvolver coisas antes que elas vão para produção… mas não preciso te dizer isso! :sweat_smile: Também é um pouco irritante que seja um problema no Stable…

Movido para Bug por enquanto…

2 curtidas

OK, temos ainda mais certeza de que há um problema aqui… já que mergeMixins é mencionado no rastreamento da pilha

(graças a @RGJ por encontrar isso)

4 curtidas

Bom trabalho de investigação - obrigado @merefield e @RGJ

Não tenho a certeza do quanto podemos fazer para corrigir isto dentro do Discourse - como notou, o problema parece estar a montante no Ember. Talvez possamos corrigir o método problemático :thinking:

Para começarmos, adicionei um caso de teste mínimo com falha para que possamos acompanhar o progresso. Existem alguns comentários no teste que descrevem porque o problema está a ser acionado pelo nosso sistema modifyClass:

4 curtidas

Sim, obrigado pelos seus esforços também. É estranho que eles tenham deixado essa questão sem solução? Sabemos se o (Ember) 4.x irá resolvê-la?

Infelizmente, parece que o problema ainda existe no Ember 4.x :cry:

1 curtida

Curiosamente, esse parece ser o único progresso no projeto Ember, dentro do PR associado que ainda está em rascunho. Pergunto-me se tudo o que seria necessário seria um pedido educado para priorizá-lo quando o tempo estiver disponível?:

Compreendo totalmente que isso foi aberto por um membro da equipe de terceiros.

Vale a pena abrir uma issue em GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications e referenciar este PR, este Tópico e o seu teste?

Sim, meu teste é baseado no deles (mas com a API específica do Discourse api.modifyClass). Não acho que devamos abrir um novo problema - é 100% o mesmo que o que já está aberto. Veremos se podemos fazer algo para priorizá-lo.

3 curtidas

Fazendo algum progresso aqui - agora temos um PR com uma correção aberta em [BUGFIX LTS] Don't run getters while applying mixins by wycats · Pull Request #20388 · emberjs/ember.js · GitHub

Assim que for mesclado e retroportado para o Ember 3.28, nosso objetivo será aplicá-lo ao Discourse o mais rápido possível.

3 curtidas

Portado?! Fiquei pensando sobre isso, ótima notícia!

Obrigado por cuidar disso, David!

Esta correção foi lançada como parte do Ember 3.28.12 e atualizamos o Discourse para usá-la. Por favor, informe-nos se você ainda estiver vendo algum problema com modifyClass após a atualização para o Discourse mais recente.

6 curtidas

Ótimo David, muito obrigado!

2 curtidas

Este tópico foi fechado automaticamente após 9 dias. Novas respostas não são mais permitidas.