Reclassification en tant que bug.
J’ai ajouté un console.log dans le code de l’API du plugin app/assets/javascripts/discourse/app/lib/plugin-api.js pour qu’il s’affiche chaque fois que modifyClass est appelé.
J’ai supprimé tous les plugins externes pour m’assurer qu’il n’y avait pas de conflit.
Reproduction :
-
Créez un forum vide sur
stable(donc sans Ember CLI). Cela ne fonctionne pas non plus sur tests-passed (sans Ember CLI). Je n’ai pas testé avec Ember CLI. -
Ajoutez un composant de thème avec ceci dans Commun - En-tête
#1 Fonctionne
<script type="text/discourse-plugin" version="0.1">
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
</script>
-
Chargez la page d’accueil
-
La console affiche
modifyClass called for model:user _application-08d9058ddd37ba80992f770509f4919ad0738a17f14fb85167b1dc1f32f8b56e.js:23490:16 Object { pluginId: "test-tc", testFunction: testFunction() } -
Entrez
Discourse.currentUser.testFunction()dans la console -
“1” est affiché
#2 Échoue
- Allez sur un sujet, par exemple ‘Welcome to Discourse’ et rechargez la page
- La console affiche les mêmes logs “modifyClass called”
- Entrez
Discourse.currentUser.testFunction()dans la console Uncaught TypeError: Discourse.currentUser.testFunction is not a functionest affiché
#3 Échoue avec avertissement
- Ajoutez une seule ligne en haut du composant de thème pour qu’il ressemble à ceci :
<script type="text/discourse-plugin" version="0.1">
const userModel = api.container.lookup("model:user");
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
</script>
- Allez sur un sujet, par exemple ‘Welcome to Discourse’ et rechargez la page
- La console affiche les mêmes logs “modifyClass called”
- La console affiche un avertissement
"model:user" was already cached in the container. Changes won't be applied. - Entrez
Discourse.currentUser.testFunction()dans la console Uncaught TypeError: Discourse.currentUser.testFunction is not a functionest affiché
#4 Fonctionne
- Déplacez la ligne
lookupen bas du composant de thème pour qu’il ressemble à ceci :
<script type="text/discourse-plugin" version="0.1">
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
const userModel = api.container.lookup("model:user");
</script>
- Allez sur un sujet, par exemple ‘Welcome to Discourse’ et rechargez la page
- La console affiche les mêmes logs “modifyClass called”
- Entrez
Discourse.currentUser.testFunction()dans la console - “1” est affiché
