Skip to content

5.0.0-beta.1 Fragment Array model updates don't work with did-update #393

@mike-engel

Description

@mike-engel

I've been in the middle of updating our ember app from 3.12 to 3.24 now that this beta is available, and for the most part it's been smooth sailing! I've run into one issue though, which is that updates to a fragment array model don't seem to trigger a change, or at least one recognized by ember-modifiers' did-update modifier.

Here's an example.

// models/webhook.js
export default class Webhook extends Model {
  @fragmentArray('header') headers
  @attr body
}

// models/header.js
export default class Header extends Fragment {
  @attr name
  @attr value
}

Then, if I have a glimmer component with a did-update modifier like this

{{! template.hbs }}
<div {{did-update this.validateHeaders @webhook.headers}}>
  ...
</div>

then this.validateHeaders only runs when the headers property changes length (i.e. header fragments are added or removed, but not modified).

It's possible that this is intended behavior, and that a custom computed property needs to be set up to track this (which is what I did, below) but it feels like this should work.

// controller.js
export default class WebhookComponent extends Component {
  @computed('args.webhook.headers.@each.{name,value}')
  get headers() {
    return this.args.webhook.headers.serialize();
  }
}
{{! template.hbs }}
<div {{did-update this.validateHeaders this.headers}}>
  ...
</div>

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions