So aktualisieren Sie die gepufferten Attribute innerhalb einer Glimmer-Komponente, die an edit-topic angehängt ist

Dies ist die alte Vorlage, die ich loswerden und in eine Glimmer-Komponente verschieben möchte

{{#if model.showLocationControls}}
  {{add-location-controls
    location=buffered.location
    categoryId=buffered.category.id
  }}
{{/if}}

Weiter unten gibt es einfach ein this.set("location", location);, das eine Zwei-Wege-Bindung zu haben scheint.

Das funktioniert gut.

Der Zugriff auf den Puffer mit buffered bietet die notwendige Konnektivität, um Änderungen am Standort nach oben weiterzugeben.

Die Herausforderung besteht darin, wenn eine Ersatz-Glimmer-Komponente verwendet wird:

export default class EditLocationDetails extends Component {

  @action
  updateLocation(location) {
    this.args.outletArgs.buffered.location = location;
  }

  <template>
    {{#if this.args.outletArgs.model.showLocationControls}}
      <AddLocationControls
        @location={{this.args.outletArgs.buffered.location}}
        @category={{this.args.outletArgs.buffered.category}}
        @updateLocation={{this.updateLocation}}
      />
    {{/if}}
  </template>
}

Jetzt kann das Attribut aktualisiert werden, aber es bleibt nicht bestehen, vermutlich weil es sich um ein Daten-nach-unten-Glimmer-Argument handelt.

Was übersehe ich?

Gibt es eine Aktion, auf die ich zugreifen kann, die es mir ermöglicht, die Änderung nach oben weiterzugeben?

4 „Gefällt mir“

OK, das scheint mir zu fehlen.

Beim Erkunden des Objekts fand ich ein paar interessante Attribute, daher wird diese Aktion zu:

  @action
  updateLocation(location) {
    this.args.outletArgs.buffered.buffer = {
      location: location
    }
    this.args.outletArgs.buffered.hasBufferedChanges = true;
  }

Das scheint es zu tun.

Fast nichts davon war sofort offensichtlich.

Bitte lassen Sie mich wissen, ob es eine bessere Möglichkeit gibt, dies zu tun.

4 „Gefällt mir“

Es gibt eine elegantere Methode, dies zu tun, und vermutlich ist dies Standard und beabsichtigt:

  @action
  updateLocation(location) {
    set(this.args.outletArgs.buffered, "location", location);
    this.location = location;
  }
3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.