Problemas al anular getters en un controlador (3.0.0)

Tengo este código en mi inicializador, está intentando sobrescribir el getter de allAdminRoutes:

    api.modifyClass('controller:admin-plugins', {
      pluginId: PLUGIN_ID,

      get allAdminRoutes() {
        return this.model
          .filter(p => p?.enabled)
          .map(p => {
            return p.admin_route;
          })
          .filter(Boolean);
      },
    });

Está fallando con:

TypeError: this.model is undefined

Ahora, no me importaría, pero es solo el código del getter original (¡aún no lo he cambiado!).

¿Qué me estoy perdiendo? ¿Sobrescribir un getter de esta manera no es compatible o introduce algún tipo de problema de alcance?

4 Me gusta

Curiosamente, esto no parece ser un problema con la última versión. (Eso fue solo una prueba en Producción).

Veré si puedo reproducirlo en una versión 3.0.0 Estable limpia.

1 me gusta

El ejemplo debería funcionar, y no tengo conocimiento de ningún cambio relevante entre la versión estable y ahora. ¡Avísanos si logras reproducir el problema!

1 me gusta

Gracias David. Lo haré. Sí, me di cuenta de eso. La pelota definitivamente está de mi lado por ahora, ya que el entorno en el que experimenté esto no estaba completamente limpio.

1 me gusta

OK David, parece (y esto es extraño):

  • Funciona en Producción
  • Falla en Desarrollo a partir de la versión 3.0.0 (posiblemente antes)
    • He probado en un entorno de desarrollo estándar sin Docker, pero también en un entorno de desarrollo Docker muy limpio (aunque posiblemente con una configuración incompleta y personalizada).

Aquí están los errores:

Error ocurrido:

- Al renderizar:
  - nivel superior
    aplicación
      discourse-raíz
        envoltura-lateral
          admin
            envoltura-admin
              elemento-navegación
                link-to
                  -link-to
TypeError no capturado (en promesa): Al generar el enlace a la ruta "adminPlugins": this.model está indefinido
    obtener todas las rutas de administración admin-plugins.js:20

Nota: puedo colocar una instrucción de depuración antes del return this.model, pero el depurador nunca se activa.

@RGJ también ha revisado esto amablemente y puede reproducir este resultado.

Esto es un poco problemático, ya que claramente necesitamos desarrollar cosas antes de que lleguen a producción… ¡pero no hace falta que te lo diga! :sweat_smile: También es algo molesto que sea un problema en la versión Estable…

Movido a Contribute > Bug por ahora…

2 Me gusta

OK, estamos aún más seguros de que hay un problema aquí… ya que mergeMixins se menciona en el rastreo de la pila

(gracias a @RGJ por encontrar esto)

4 Me gusta

Gran trabajo de investigación. Gracias @merefield y @RGJ.

No estoy seguro de cuánto podemos hacer para solucionar esto dentro de Discourse, ya que, como señalaste, el problema parece estar aguas arriba en Ember. Quizás podamos parchear el método problemático :thinking:

Para empezar, he añadido un caso de prueba mínimo que falla para que podamos seguir el progreso. Hay algunos comentarios en la prueba que describen por qué el problema está siendo activado por nuestro sistema modifyClass:

4 Me gusta

Sí, gracias también por tus esfuerzos. ¿Es extraño que hayan dejado ese problema sin resolver? ¿Sabemos si (Ember) 4.x lo resolverá?

Lamentablemente, parece que el problema todavía existe en Ember 4.x :cry:

1 me gusta

Curiosamente, ese parece ser el único progreso en el proyecto Ember, dentro del PR asociado que todavía está en Borrador. Me pregunto si todo lo que se requeriría sería una solicitud educada para priorizarlo cuando el tiempo esté disponible:

Aprecio totalmente que esto fuera abierto por un miembro del personal de un tercero.

¿Vale la pena plantear un problema en GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications y hacer referencia a este PR, este Tema y tu prueba?

Sí, mi prueba se basa en la suya (pero con la API específica de Discourse api.modifyClass). No creo que debamos abrir un nuevo problema; es 100% lo mismo que el que ya está abierto. Veremos si podemos hacer algo para que se priorice.

3 Me gusta

Estamos avanzando: ya tenemos una PR con una solución abierta en [BUGFIX LTS] Don't run getters while applying mixins by wycats · Pull Request #20388 · emberjs/ember.js · GitHub

Una vez que se fusione y se backportee a Ember 3.28, nuestro objetivo será aplicarla a Discourse lo antes posible.

3 Me gusta

¿Trasladado? ¡Me preguntaba sobre eso, fantásticas noticias!

¡Gracias por guiar esto, David!

Esta corrección ya se ha lanzado como parte de Ember 3.28.12 y hemos actualizado Discourse para utilizarla. Por favor, háganos saber si todavía está experimentando algún problema con modifyClass después de actualizar a la última versión de Discourse.

6 Me gusta

¡Genial David, muchas gracias!

2 Me gusta

Este tema se cerró automáticamente después de 9 días. Ya no se permiten nuevas respuestas.