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 raro):

  • funciona en Producción
  • falla en Desarrollo 3.0.0 en adelante (posiblemente antes)
  • He probado en un entorno de desarrollo sin Docker y también en un entorno de desarrollo Docker personalizado muy limpio (pero posiblemente con configuración incompleta).

Aquí están los errores:

Ocurrió un error:

- Al renderizar:
  -nivel superior
    aplicación
      discourse-root
        sidebar-wrapper
          admin
            admin-wrapper
              nav-item
                link-to
                  -link-to
Uncaught (in promise) TypeError: Al generar el enlace a la ruta "adminPlugins": this.model is undefined
    get allAdminRoutes admin-plugins.js:20

tenga en cuenta que puedo poner una declaración de depuración antes del return this.model y nunca se activa el depurador.

@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 tengo que decírtelo! :sweat_smile: También es un poco molesto que sea un problema en Estable…

Movido a 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.