Modo corretto di renderizzare condizionalmente il testo in un template - o VALUE modificato due volte in un singolo render

Ho un plugin che (quasi) crea Droplet su Digital Ocean e installa Discourse.

Ho una pagina con un template che rende informazioni sul modello Rails, sul droplet che viene creato e sull’istanza di Discourse installata sul droplet. Ho tutte le informazioni necessarie che fluiscono tra Rails ed Ember tramite MessageBus. Voglio visualizzare contenuti diversi a seconda che:

  • ci siano informazioni sufficienti per creare il droplet
  • l’attività che crea il droplet sia in esecuzione (aggiorna i dati nel modello)
  • Discourse sia stato installato

Continuo a ottenere l’errore:

   You modified "hasStatus" twice on <@ember/component:ember660> in a single render.

EDIT: Beh, questo perché avevo due funzioni computed che osservavano la stessa cosa…

Penso di aver finalmente capito che non posso farlo usando qualcosa come {{#if hasStatus}} (che è una funzione calcolata) nel template, poiché la pagina dovrà essere ridisegnata per mostrare lo stato dopo che l’utente clicca sul pulsante “crea droplet” (poiché ciò imposterà la variabile installation_status, che visualizza cosa sta accadendo durante l’installazione).

Oppure forse c’è qualche altro errore che sta innescando il problema e quello che sto facendo dovrebbe funzionare?

Quindi immagino che ciò di cui ho bisogno sia usare \u003cgasp\u003e CSS per nascondere i vari elementi?

1 Mi Piace

Beh, come spesso accade quando pubblico cose del genere, la risposta è ancora più bizzarra di quanto potessi immaginare.

Se uso cose come {{#if server.value}} e value viene aggiornato dal MessageBus, funziona come previsto quando eseguo un aggiornamento dalla console di Rails. Posso impostarlo a nil/non nil e la sezione della pagina appare/scompare come previsto. Quando eseguo il mio task Ansible da un terminale, Ansible invia un nuovo valore tramite una route, aggiorna il record, che a sua volta lo invia al message bus e la sezione del template appare come previsto.

Tuttavia, se Ansible viene eseguito da un job di Discourse, vedo ancora che Rails afferma di inviare i dati al message bus. E vedo nella console JavaScript del browser che una funzione computata che monitora quel valore viene attivata e il valore è null. Se ricarico il browser, i dati sono presenti e la pagina si renderizza come previsto. Forse è una stranezza dell’ambiente di sviluppo e sarà diverso in produzione.

Forse è correlato a questo?

Beh, sono ancora preoccupato per quell’errore, ma ho aggiunto

         window.location.reload(true);

alla mia azione e la pagina si ricarica e tutto sembra funzionare dopo di ciò.

1 Mi Piace