Richtige Methode, um Text in einer Vorlage bedingt darzustellen – oder den Wert zweimal in einem einzigen Render zu ändern

Ich habe ein Plugin, das (fast) Digital Ocean Droplets erstellt und Discourse installiert.

Ich habe eine Seite mit einer Vorlage, die Inhalte zum Rails-Modell, dem erstellten Droplet und der auf dem Droplet installierten Discourse-Instanz rendert. Ich habe alle Informationen, die zwischen Rails und Ember über den MessageBus fließen müssen. Ich möchte je nach Situation verschiedene Inhalte anzeigen:

  • ob genügend Informationen vorhanden sind, um das Droplet zu erstellen
  • ob die Aufgabe zur Erstellung des Droplets läuft (sie aktualisiert Daten im Modell)
  • ob Discourse installiert wurde

Ich bekomme ständig folgende Fehlermeldung:

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

EDIT: Das lag daran, dass ich zwei computed-Funktionen hatte, die dasselbe beobachteten…

Ich glaube, ich habe endlich begriffen, dass ich das nicht mit etwas wie {{#if hasStatus}} (was eine computed-Funktion ist) in der Vorlage lösen kann, da die Seite neu gerendert werden muss, um den Status nach dem Klick auf den Button „Droplet erstellen

1 „Gefällt mir“

Nun, wie so oft, wenn ich solche Dinge poste, ist die Antwort noch bizarrer, als ich mir hätte vorstellen können.

Wenn ich Dinge wie {{#if server.value}} verwende und value vom MessageBus aktualisiert wird, funktioniert es wie erwartet, wenn ich ein Update über die Rails-Konsole durchführe. Ich kann es auf nil/nicht-nil setzen, und der Abschnitt der Seite erscheint bzw. verschwindet wie erwartet. Wenn ich meine Ansible-Aufgabe aus einem Terminal ausführe, sendet Ansible einen neuen Wert über eine Route, aktualisiert den Datensatz, der dann an den MessageBus weitergeleitet wird, und der Abschnitt der Vorlage erscheint wie erwartet.

Wenn Ansible jedoch von einer Discourse-Job-Aufgabe ausgeführt wird, sehe ich zwar, dass Rails behauptet, die Daten an den MessageBus zu senden. Und im JavaScript-Konsolenfenster des Browsers sehe ich, dass eine berechnete Funktion, die diesen Wert verfolgt, ausgelöst wird und der Wert null ist. Wenn ich den Browser neu lade, sind die Daten vorhanden und die Seite wird wie erwartet gerendert. Vielleicht ist das eine Eigenart der Entwicklungsumgebung und auf der Produktionsumgebung ist es anders.

Vielleicht hängt das damit zusammen?

Ich mache mir immer noch Sorgen wegen dieses Fehlers, aber ich habe

         window.location.reload(true);

zu meiner Aktion hinzugefügt, und die Seite wird neu geladen, und danach scheint alles zu funktionieren.

1 „Gefällt mir“