Problemi nell'override dei getter in un controller (3.0.0)

Ho questo codice nel mio inizializzatore, sta tentando di sovrascrivere il getter per 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);
      },
    });

Sta fallendo con:

TypeError: this.model is undefined

Ora, non mi dispiacerebbe, ma è solo il codice del getter originale (non l’ho ancora cambiato!)

Cosa mi sfugge? Sovrascrivere un getter in questo modo non è supportato o introduce qualche tipo di problema di scope?

4 Mi Piace

Stranamente, questo non sembra essere un problema con l’ultima versione. (Quello era solo un test in Produzione.)

Vedrò se riesco a riprodurlo su una versione stabile pulita 3.0.0.

1 Mi Piace

L’esempio dovrebbe funzionare e non sono a conoscenza di modifiche rilevanti tra la versione stabile e ora. Fateci sapere se riuscite a riprodurre il problema!

1 Mi Piace

Grazie David. Lo farò. Sì, l’ho notato. La palla è decisamente nel mio campo per ora, dato che l’ambiente in cui l’ho riscontrato non era completamente pulito.

1 Mi Piace

OK David, sembra (e questa è una cosa strana):

  • funziona in Produzione
  • fallisce in Development dalla versione 3.0.0 in poi (forse anche prima)
  • Ho testato su un ambiente Dev standard senza Docker, ma anche su un ambiente Docker Dev molto pulito (anche se forse con una configurazione incompleta e personalizzata).

Ecco gli errori:

Si è verificato un errore:

- Durante il rendering:
  - livello superiore
    applicazione
      discourse-root
        sidebar-wrapper
          admin
            admin-wrapper
              nav-item
                link-to
                  -link-to
Uncaught (in promise) TypeError: Mentre si generava il link alla rotta "adminPlugins": this.model è undefined
    get allAdminRoutes admin-plugins.js:20

Nota che posso inserire un’istruzione debugger prima del return this.model, ma il debugger non viene mai attivato.

@RGJ ha gentilmente esaminato il problema e ha confermato di poter riprodurre lo stesso risultato.

Questa è un po’ un problema, dato che chiaramente dobbiamo sviluppare le funzionalità prima di metterle in produzione… ma non devo certo dirtelo! :sweat_smile: Inoltre, è un po’ fastidioso che il problema si verifichi anche sulla versione Stable…

Per ora ho spostato la discussione in Contribute > Bug

2 Mi Piace

OK, siamo ancora più sicuri che ci sia un problema qui… dato che mergeMixins è menzionato nello stack trace

(grazie a @RGJ per averlo trovato)

4 Mi Piace

Belissimo lavoro di ricerca, grazie @merefield e @RGJ

Non sono sicuro di quanto possiamo fare per risolvere questo problema all’interno di Discourse, dato che, come hai notato, il problema sembra essere a monte in Ember. Forse possiamo applicare una patch al metodo problematico :thinking:

Per iniziare, ho aggiunto un caso di test minimo che fallisce in modo da poter monitorare i progressi. Ci sono alcuni commenti nel test che descrivono perché il problema viene innescato dal nostro sistema modifyClass:

4 Mi Piace

Sì, grazie anche per i tuoi sforzi. È strano che abbiano lasciato irrisolta quella questione? Sappiamo se (Ember) 4.x la risolverà?

Purtroppo sembra che il problema esista ancora in Ember 4.x :cry:

1 Mi Piace

Stranamente, questo sembra essere l’unico progresso nel progetto Ember, all’interno della PR associata che è ancora in bozza. Mi chiedo se tutto ciò che sarebbe necessario sia una richiesta educata di dare priorità quando il tempo sarà disponibile?:

Apprezzo pienamente che questo sia stato aperto da un membro dello staff di terze parti.

Vale la pena sollevare un problema su GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications e fare riferimento a questa PR, a questo argomento e al tuo test?

Sì, il mio test si basa sul loro (ma con l’API api.modifyClass specifica di Discourse). Non penso che dovremmo aprire un nuovo problema: è 100% lo stesso di quello già aperto. Vedremo se possiamo fare qualcosa per farlo dare priorità.

3 Mi Piace

Sto facendo qualche progresso - ora abbiamo una PR con una correzione aperta su [BUGFIX LTS] Don't run getters while applying mixins by wycats · Pull Request #20388 · emberjs/ember.js · GitHub

Una volta che sarà unita e riportata su Ember 3.28, mireremo ad applicarla a Discourse il prima possibile.

3 Mi Piace

Riportato?! Mi chiedevo a riguardo, ottime notizie!

Grazie per aver seguito questa cosa, David!

Questa correzione è ora stata rilasciata come parte di Ember 3.28.12 e abbiamo aggiornato Discourse per utilizzarla. Fateci sapere se riscontrate ancora problemi con modifyClass dopo l’aggiornamento all’ultima versione di Discourse.

6 Mi Piace

Fantastico David, grazie mille!

2 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 9 giorni. Non sono più consentite nuove risposte.