Reclasificando esto como un error.
He añadido un console.log en el código de la API del plugin app/assets/javascripts/discourse/app/lib/plugin-api.js para que registre cada vez que se llama a modifyClass.
He eliminado todos los plugins externos para asegurarme de que no hubiera ningún conflicto.
Reproducción:
-
Crea un foro vacío en
stable(sin Ember CLI). Esto tampoco funciona en tests-passed (sin Ember CLI). No lo he probado con Ember CLI. -
Añade un componente de tema con esto en Común - Cabecera
#1 Funciona
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
-
Carga la página de inicio
-
La consola muestra
modifyClass called for model:user _application-08d9058ddd37ba80992f770509f4919ad0738a17f14fb85167b1dc1f32f8b56e.js:23490:16 Object { pluginId: "test-tc", testFunction: testFunction() } -
Introduce
Discourse.currentUser.testFunction()en la consola -
Se imprime “1”
#2 Falla
- Ve a un tema, por ejemplo ‘Welcome to Discourse’ y recarga la página
- La consola muestra los mismos logs de “modifyClass called”
- Introduce
Discourse.currentUser.testFunction()en la consola - Se imprime
Uncaught TypeError: Discourse.currentUser.testFunction is not a function
#3 Falla con advertencia
- Añade una sola línea al principio del componente de tema para que se vea así:
const userModel = api.container.lookup("model:user");
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
- Ve a un tema, por ejemplo ‘Welcome to Discourse’ y recarga la página
- La consola muestra los mismos logs de “modifyClass called”
- La consola muestra una advertencia
"model:user" was already cached in the container. Changes won't be applied. - Introduce
Discourse.currentUser.testFunction()en la consola - Se imprime
Uncaught TypeError: Discourse.currentUser.testFunction is not a function
#4 Funciona
- Mueve la línea de lookup al final del componente de tema para que se vea así:
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
const userModel = api.container.lookup("model:user");
- Ve a un tema, por ejemplo ‘Welcome to Discourse’ y recarga la página
- La consola muestra los mismos logs de “modifyClass called”
- Introduce
Discourse.currentUser.testFunction()en la consola - Se imprime “1”
