Wie sehe ich, ob Formular-Toolkit-Daten "dirty" sind?

Diskussion fortgesetzt von Discourse-Toolkit zum Rendern von Formularen:slight_smile:

Ich möchte, dass mein Speicher-Button nur verfügbar ist, wenn etwas zu speichern ist.

Die Suche nach isDirty in allen Plugins ergibt nichts. Der einzige Ort, an dem ich es im Kern sehe, ist im Toolkit.

Sicherlich gibt es eine Möglichkeit zu sehen, ob ein Speicher-Button aktiv sein sollte.

Ich habe das hier:


export default class ServerCreate extends Component {
  @tracked formApi = null;
  @tracked isDirty = false;

  @action
  registerAPI(api) {
    console.log("registerAPI called", api);
    this.formApi = api;

    // api.onChange(() => {
    //   console.log("onChange!", api.isDirty);
    //   this.isDirty = api.isDirty;
    // });
  }

  get submitDisabled() {
    // formApi kann undefiniert sein, bis das Formular registriert ist
    console.log("submitDisabled", this);
    return !this.formApi?.isDirty;
  }

....

      <Form
        @data={{this.formData}}
        @onRegisterApi={{this.registerAPI}}
        @onSubmit={{this.handleSubmit}}
        as |form|
      >

und das (ich habe ein paar Dinge ausprobiert):

            <form.Submit
              @label="pfaffmanager.server.save_button"
              class="save"
              @icon="check"
              @disabled={{this.registerAPI.isDirty}}
            />

Ich konnte nicht herausfinden, wie ich sehen kann, ob die Daten geändert wurden, um zu wissen, ob ich sie speichern soll. Ich verstehe nicht, warum ich kein Beispiel dafür finden kann. Ich habe ein paar Dinge ausprobiert, die wie das Beispiel in der Dokumentation aussehen, aber keines davon hat funktioniert.

Ich habe versucht, mir die Admin-Einstellungseiten anzusehen, von denen ich weiß, dass sie einen Speicher-Button anzeigen, nur wenn Daten geändert wurden, aber es scheint, dass sie das Forms-Toolkit nicht verwenden.

Ich sehe, dass meine Funktion registerAPI(api) aufgerufen wird, aber ich sehe isDirty nicht darin:

Dann, wenn ich es protokollieren lasse, sieht es so aus, als wäre es nur Text?

Natürlich ist isDirty dann, wenn ich den Button aktiviert haben möchte, nicht deaktiviert, aber andere Beispiele, die ich bekommen habe (wahrscheinlich von ask.discourse.com), sagten mir, ich solle so etwas wie @disabled={{not this.isDirty}} machen, und es gibt kein not, also wäre ich vorerst glücklich, wenn es rückwärts funktionieren würde.

2 „Gefällt mir“