如何在附加到edit-topic的Glimmer组件中更新缓冲属性

这是我试图消除并移至 Glimmer 组件的旧模板

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

下面,有一个 this.set("location", location); 似乎表现出双向绑定。

这运行正常。

通过 buffered 访问缓冲区提供了将更改传递到位置的必要连接。

挑战在于使用替换的 Glimmer 组件时:

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>
}

现在可以更新属性,但它不会保留,可能因为它是一个数据向下 Glimmer 参数。

我错过了什么?

是否有我可以访问的动作可以让我传递更改?

4 个赞

好的,这似乎是我遗漏的部分。

在探索对象时,我发现了一些有趣的属性,因此该操作变为:

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

这似乎解决了问题。

几乎没有一点是显而易见的。

如果有什么更好的方法,请告诉我。

4 个赞

有一种更优雅的执行此操作的方法,并且可以假定这是更标准和预期的:

  @action
  updateLocation(location) {
    set(this.args.outletArgs.buffered, "location", location);
    this.location = location;
  }
3 个赞

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