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 emtests-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
