api.modifyClass a veces(!) no funciona

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” :partying_face:
4 Me gusta