api.modifyClass a volte(!) non funziona

Riclassificazione come bug.

Ho aggiunto un console.log nel codice dell’API del plugin app/assets/javascripts/discourse/app/lib/plugin-api.js in modo che registri ogni volta che modifyClass viene chiamato.

Ho rimosso tutti i plugin esterni per assicurarmi che non ci fosse un conflitto da qualche parte.

Riproduzione:

  • crea un forum vuoto su stable (quindi senza Ember CLI). Questo non funziona nemmeno su tests-passed (senza Ember CLI). Non l’ho testato con Ember CLI.

  • aggiungi un componente tema con questo in Common - Head

#1 Funzionante

<script type="text/discourse-plugin" version="0.1">
    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      } 
    });
</script>
  • carica la home page

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

  • inserisci Discourse.currentUser.testFunction() nella console

  • viene stampato “1”

#2 Fallimento

  • Vai a un argomento, ad esempio ‘Welcome to Discourse’ e ricarica la pagina
  • la console mostra gli stessi log di “modifyClass called”
  • inserisci Discourse.currentUser.testFunction() nella console
  • viene stampato Uncaught TypeError: Discourse.currentUser.testFunction is not a function

#3 Fallimento con avviso

  • Aggiungi una singola riga in cima al componente tema in modo che appaia così:
<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>
  • Vai a un argomento, ad esempio ‘Welcome to Discourse’ e ricarica la pagina
  • la console mostra gli stessi log di “modifyClass called”
  • la console mostra un avviso \"model:user\" was already cached in the container. Changes won't be applied.
  • inserisci Discourse.currentUser.testFunction() nella console
  • viene stampato Uncaught TypeError: Discourse.currentUser.testFunction is not a function

#4 Funzionante

  • Sposta la riga di lookup in fondo al componente tema in modo che appaia così:
<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>
  • Vai a un argomento, ad esempio ‘Welcome to Discourse’ e ricarica la pagina
  • la console mostra gli stessi log di “modifyClass called”
  • inserisci Discourse.currentUser.testFunction() nella console
  • viene stampato “1” :partying_face:
4 Mi Piace