# Résolution de la dépréciation \`this-property-fallback\`

**URL:** https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276
**Category:** Development
**Tags:** dev-news
**Created:** [Novembre 21, 2024, 7:08 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276 "2024-11-21T19:08:58Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Novembre 21, 2024, 7:08 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276/1 "2024-11-21T19:08:58Z")

</div>

## Contexte

Essentiellement, si vous utilisez quelque chose comme `{{foo}}` dans un modèle handlebars pour faire référence à une propriété du contrôleur/composant, vous devez le mettre à jour en `{{this.foo}}`.

Informations en amont : [Property Fallback Lookup | Ember.js - Deprecations](https://deprecations.emberjs.com/id/this-property-fallback/)

Pour faire passer Discourse à la mise à niveau Ember 4.x, nous avons introduit un correctif de rétrocompatibilité afin que les thèmes et les plugins n’aient pas besoin de se précipiter pour ce changement. Cependant, il n’est pas possible de maintenir ce correctif indéfiniment, nous devons donc mettre à jour les thèmes et les plugins vers la syntaxe moderne.

## Dépréciation

Dans la dernière version de Discourse, l’utilisation de la syntaxe héritée provoquera l’affichage d’un message de dépréciation dans la console. Il ressemblera à ceci :

```markdown
DÉPRÉCIATION : [PLUGIN discourse-calendar] La propriété `loading` a été utilisée dans le modèle `discourse/plugins/discourse-calendar/discourse/templates/admin-plugins-calendar.hbs` sans utiliser `this`. Ce comportement de repli a été déprécié, toutes les propriétés doivent être recherchées sur `this` lorsqu'elles sont utilisées dans le modèle : {{this.loading}}

```

Comme pour toute autre dépréciation, nous augmenterons progressivement la visibilité de cet avertissement, jusqu’à ce que nous supprimions éventuellement le correctif de rétrocompatibilité. Nous visons provisoirement le deuxième trimestre 2025 pour la suppression finale, mais nous ajusterons cela en fonction des données du monde réel.

## Mise à niveau de votre code

Pour les petits thèmes/plugins, vous pouvez mettre à jour les modèles manuellement pour ajouter `this.` avant tout nom de propriété.

Pour faciliter la transition pour les thèmes/plugins plus importants, nous avons introduit une nouvelle règle ember-template-lint qui comprend un correcteur automatique.

Ainsi, si vous utilisez la dernière version de notre configuration de linting standard (conformément au [squelette de plugin](https://github.com/discourse/discourse-plugin-skeleton) et au [squelette de thème](https://github.com/discourse/discourse-theme-skeleton)), tout le code affecté sera automatiquement mis à jour la prochaine fois que vous exécuterez `ember-template-lint --fix`.

Si vous avez des questions/préoccupations, n’hésitez pas à nous en faire part ci-dessous !

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Novembre 21, 2024, 9:29 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276/2 "2024-11-21T21:29:53Z")

</div>

> [@david](#):
>
> Si vous utilisez la dernière version de notre configuration de linting standard (conformément au [squelette de plugin](https://github.com/discourse/discourse-plugin-skeleton) et au [squelette de thème](https://github.com/discourse/discourse-theme-skeleton)), alors tout le code affecté sera automatiquement mis à jour la prochaine fois que vous exécuterez `ember-template-lint --fix`.

C’est génial ! Dans l’un de mes plugins où (je pense avoir) correctement mis à jour la configuration de linting, je vois un tas d’instances de `{{this.blah}}` qui, j’en suis à peu près sûr, n’étaient pas là jusqu’à récemment. Je ne peux pas assez souligner à quel point c’est cool. 🎉 🥂 🍻

Ce serait bien s’il existait un moyen automatisé de copier/supprimer les fichiers appropriés dans chaque plugin lorsqu’il y a une mise à jour du squelette. (J’ai peut-être ou peut-être pas réussi à le faire manuellement cette fois-ci.) Peut-être serait-il possible de placer un petit script `bash` dans le squelette qui vérifierait la présence de `plugin.rb` dans le répertoire courant, et s’il était là, il pourrait copier des éléments de l’emplacement du script vers le répertoire courant. Quelque chose comme ça.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Novembre 21, 2024, 10:45 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276/3 "2024-11-21T22:45:13Z")

</div>

> [@pfaffman](#):
>
> Ce serait bien s’il existait un moyen automatisé de copier/supprimer les bons fichiers dans chaque plugin lors d’une mise à jour du squelette. (J’ai peut-être réussi à le faire manuellement cette fois-ci.) Peut-être qu’il serait possible de placer un petit script `bash` dans le squelette qui vérifierait la présence de `plugin.rb` dans le répertoire courant, et s’il était là, il pourrait copier des éléments de l’emplacement du script vers le répertoire courant. Quelque chose comme ça.

Nous ne l’avons pas vraiment rendu public, mais vous pourriez être intéressé par [GitHub - discourse/mass-pr: A tool for applying automated changes across a large number of GitHub repositories](https://github.com/discourse/mass-pr). Nous l’utilisons pour appliquer ce genre de changements sur les plus de 600 dépôts de thèmes/plugins que nous maintenons.

Donc, dans ce cas, j’exécute quelque chose comme :

```plaintext
GITHUB_TOKEN=... pnpm mass-pr \
  --message "DEV: Update linting" \
  --branch "update-linting" \
  --script scripts/update-js-linting.sh \
  discourse-solved \
  discourse-assign \
  ...

```

et cela met à jour les éléments du squelette, corrige automatiquement tout le linting, et crée la PR sur GitHub.

Ensuite, nous avons un autre script pour gérer la fusion : [GitHub - discourse/mass-merge: A script for mass-approving and merging Dependabot pull requests](https://github.com/discourse/mass-merge)

Certainement #pr-welcome pour un script de mise à jour plus léger ! Ceux-ci sont un peu trop puissants si vous n’avez qu’un seul dépôt à mettre à jour.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Novembre 22, 2024, 5:47 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276/4 "2024-11-22T17:47:07Z")

</div>

> [@david](#):
>
> et il met à jour le squelette, corrige automatiquement tout le linting et crée la PR sur GitHub.

Non. C’est incroyable !

J’ai hâte de l’essayer, mais j’avais aussi hâte de vous remercier.

> [@david](#):
>
> Certainement #pr-welcome sur un script de mise à jour plus léger !

Non. Un script est 4 fois plus facile à maintenir que 2, et si vous l’utilisez, c’est celui que je veux utiliser.

Trop cool.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Novembre 22, 2024, 7:48 UTC](https://meta.discourse.org/t/resolving-the-this-property-fallback-deprecation/337276/5 "2024-11-22T19:48:48Z")

</div>

Merci, David ! C’est fantastique.

Tout d’abord, il m’a fallu un peu de temps pour comprendre que je devais faire `pnpm install`.

Et maintenant, j’ai ceci :

```bash
#!/usr/bin/env bash
# sync-with-skeleton -- suppose que vous êtes dans un
today=$(date +"%Y-%m-%d")
repo=$(grep url .git/config | sed -E 's/.*:([^/]+/[^.]+).*/\1/')
cd ~/src/discourse-repos/mass-pr
GITHUB_TOKEN=$GITHUB_TOKEN pnpm mass-pr \
--message "DEV: Update GitHub workflows" \
--branch "sync-with-skeleton-$today" \
--script scripts/update-workflows.sh \
$repo

```

Ce serait mieux si, par exemple, il vérifiait l’existence d’un `plugin.rb` dans le répertoire courant et vérifiait même si le dépôt existe, mais c’est ce que j’ai eu le temps de faire aujourd’hui. Ou je pourrais le soumettre en tant que PR et il pourrait se déplacer vers le répertoire où il se trouvait.

Et cela m’a aussi appris pourquoi je devrais soumettre des choses en tant que PRs, même quand il n’y a que moi. Merci beaucoup.
