api.modifyClass às vezes(!) não funciona

Reclassificando isso como bug.

Adicionei um console.log no código da API do plugin app/assets/javascripts/discourse/app/lib/plugin-api.js para que ele registre sempre que modifyClass for chamado.

Removi todos os plugins externos para garantir que não houvesse conflito.

Reprodução:

  • Crie um fórum vazio em stable (sem Ember CLI). Isso também não funciona em tests-passed (sem Ember CLI). Não testei com Ember CLI.

  • Adicione um componente de tema com o seguinte em Common - Head

#1 Funcionando


    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

  • Carregue a página inicial

  • O console mostra modifyClass called for model:user _application-08d9058ddd37ba80992f770509f4919ad0738a17f14fb85167b1dc1f32f8b56e.js:23490:16 Object { pluginId: "test-tc", testFunction: testFunction() }

  • Digite Discourse.currentUser.testFunction() no console

  • “1” é impresso

#2 Falhando

  • Vá para um tópico, por exemplo, ‘Welcome to Discourse’ e recarregue a página
  • O console mostra os mesmos logs de “modifyClass called”
  • Digite Discourse.currentUser.testFunction() no console
  • Uncaught TypeError: Discourse.currentUser.testFunction is not a function é impresso

#3 Falhando com aviso

  • Adicione uma única linha no topo do componente de tema para que ele fique assim:

    const userModel = api.container.lookup("model:user");

    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

  • Vá para um tópico, por exemplo, ‘Welcome to Discourse’ e recarregue a página
  • O console mostra os mesmos logs de “modifyClass called”
  • O console mostra um aviso \"model:user\" was already cached in the container. Changes won't be applied.
  • Digite Discourse.currentUser.testFunction() no console
  • Uncaught TypeError: Discourse.currentUser.testFunction is not a function é impresso

#4 Funcionando

  • Mova a linha de lookup para o final do componente de tema para que ele fique assim:

    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

    const userModel = api.container.lookup("model:user");

  • Vá para um tópico, por exemplo, ‘Welcome to Discourse’ e recarregue a página
  • O console mostra os mesmos logs de “modifyClass called”
  • Digite Discourse.currentUser.testFunction() no console
  • “1” é impresso :partying_face:
4 curtidas