Ember.js: [2.15.0] {{link-to}} dans un partiel a cessé de fonctionner

Créé le 1 sept. 2017  ·  25Commentaires  ·  Source: emberjs/ember.js

Après la mise à niveau vers la version 2.15.0, certains de nos tests ont commencé à échouer car un {{#link-to}} intérieur d'un partiel a cessé de fonctionner.

C'est le {{link-to}} en question . Lors du rendu, il n'y a pas d'erreurs immédiates mais le href généré est juste # et l'attribut data-test-user-id n'est pas affiché lors du test. Cliquez sur le lien pour afficher cet avertissement:

This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.

Tout le reste à l'intérieur du partiel fonctionne toujours bien, c'est juste le lien vers qui échoue.

Le changement du partiel en composant a résolu le problème.

Bug Ember 2.15

Commentaire le plus utile

Reproduction en 2.15 . Même twiddle fonctionnant en 2.14 .

Tous les 25 commentaires

J'ai rencontré un problème similaire dans la version 2.15, il semble qu'un partiel rendu à l'intérieur d'un bloc produit par un composant ne reçoive pas les paramètres générés par ce composant.

Exemple:

// -name.hbs
<p>{{name}}</p>

component.js

export default Component.extend({
  name: "Ivan"
})

template.hbs

{{yield name}}

some-route-template.hbs

{{#my-component as |name|}}
  {{partial "name"}}
{{/my-component}}

Dans cet exemple, la variable {{name}} dans le partiel n'est pas définie.

La même chose se produit avec une itération #each. La valeur de #each n'est pas transmise au contexte du partiel.

{{#each visibleContent as |record index|}}
  {{partial rowTemplate}}
{{/each}}

L'enregistrement et l'index ne sont pas définis dans le partiel.

Reproduction en 2.15 . Même twiddle fonctionnant en 2.14 .

Chose intéressante, je peux toujours référencer la propriété d'une variable "perdue" par son nom, par exemple dans le rowTemplate je pourrais faire record.id mais pas (get record "id") . Je ne sais pas si cela peut aider à déboguer le problème.

Ce comportement est-il hérité ou existe-t-il une approche alternative à envisager? Nous avons essayé d'utiliser des composants sur des partiels, mais pour notre grande application, il existe encore de nombreux cas où ce bogue casse des choses. À ce stade, nous sommes bloqués de la mise à niveau, et je suis surpris que cela n'affecte pas plus de gens.

Non, ce n'est pas un comportement hérité en soi, mais c'est assez rare. Vous devez _totalement_ migrer vers l'utilisation de composants chaque fois que vous le pouvez (c'est beaucoup plus simple à raisonner), mais nous devons absolument résoudre ce problème dès que possible.

@rwjblue des pointeurs sur lesquels je devrais commencer à chercher pour résoudre ce problème?

J'ai soumis https://github.com/emberjs/ember.js/issues/15674 avec quelques cas de tests échouants. Il semble que le problème ne soit pas aussi simple que d'accéder aux valeurs de propriété liées dans le partiel (du moins cela ne le semblait pas avec mes tests). Je pense que le problème sous-jacent est lié à la façon dont nous générons les références utilisées par des choses comme if , unless , with et get .

Malheureusement, je n'ai pas de pistolet fumant à pointer. :(

nous ne pouvons pas non plus mettre à jour à cause de ce bug. similaire à @ thec0keman, nous avons une application de braise assez volumineuse qui a commencé à utiliser EAK, il y a donc encore des fonctionnalités héritées que nous n'avons pas encore apportées à la braise moderne

il ne reste plus beaucoup de partiels, mais suffisamment pour que ce soit un bloqueur pour nous jusqu'à ce que nous ayons le temps de migrer / tester les partiels restants vers les composants

Celui-ci devrait vraiment avoir une priorité plus élevée, les partiels sont cassés depuis la version 2.15 et empêchent les gens de passer de la 2.14 à la 2.16.

+1

Je vais y jeter un coup d'œil la semaine prochaine après l'EmberFest.

J'ai étendu la tripoter de @Serabe et a découvert que si une propriété du même nom se définit dans le contrôleur, les obtient partials la bonne valeur. Mais si une valeur dans un tableau est undefined le partiel pense toujours qu'il a une valeur de vérité.

C'est un bug dans Glimmer. Voir dans le numéro référencé.

Une nouvelle version Glimmer avec le correctif a été publiée. Après la mise à jour de la version Glimmer, ce bogue devrait être corrigé. J'ai ouvert une pull request pour mettre à jour la version Glimmer.

Pour info - La mise à niveau vers Glimmer 0.29 est un gros effort (et peu probable avant Ember 3.0.0), @chadhietala a rétroporté le correctif vers la branche 0.25. Nous devons le publier comme version de correctif et mettre à jour cette version à la place. Je vais essayer de faire ces sorties aujourd'hui ...

@rwjblue LMK s'il y a quelque chose que je peux aider avec la version qui inclut la branche 0.25 corrigée (car je travaille sur la mise à niveau d'Intercom pour le moment). Autant que je sache, il n'a pas encore atteint le canari de braise

Le même problème existe également si vous utilisez l'aide avec :

{{#with someProperty as |youNameIt|}}
  {{partial somePartial}}
{{/with}}

Le correctif résoudra probablement cela aussi, mais pour être sûr que je le mentionne ici!

Salut. Un correctif a-t-il été publié pour ce problème? Pour autant que je sache, la plupart des helpers sont quelque peu affectés lorsqu'ils sont utilisés dans un partial . Y at-il un travail autour?

Ember 2.16.1 a été publié, ce qui devrait résoudre les problèmes avec les partiels. S'il vous plaît laissez-moi savoir si vous rencontrez toujours des problèmes

Bien que ces problèmes aient été résolus, pour info, je viens de trouver un autre problème avec les partiels:

https://github.com/emberjs/ember.js/pull/15797

Je travaillerai à résoudre ce problème plus tard dans la journée

Êtes-vous complètement sûrs que cela a été résolu pour la version 2.15? Le twiddle de

Incidemment, j'ai remarqué que si vous modifiez le partiel pour écrire le name , il imprime en fait la valeur correcte ...

image

Ce n'est pas. Ember 2.15 n'est pas un LTS, donc je ne pense pas qu'un correctif arrivera.

Confirmer.

Ah d'accord. Je pensais que le correctif rétroporté à la lueur 0.25 signifierait que cela fonctionnait également sur Ember 2.15. Je suppose que nous allons passer directement à 2.16 alors. Merci!!

Cette page vous a été utile?
0 / 5 - 0 notes