J’essaie de rendre un composant Glimmer comme une feuille d’arbre de widget, comme je l’ai fait plusieurs fois auparavant, mais j’obtiens cette erreur étrange que je n’ai jamais vue auparavant :
TypeError: this.parentMountWidgetComponent is undefined
qui se déclenche sur cette ligne :
Il semble que this.widget?._findView() || this._emberView
soit undefined.
(this.widget existe)
Mon code à un stade très précoce est ici :
Est-il légal d’utiliser RenderGlimmer dans ce contexte ?
Cela repose sur un ancêtre qui possède cette propriété ?
this._findAncestorWithProperty("_emberView")
qui renvoie undefined.
Ou sur lui-même qui possède un _emberView (ce qu’il n’a pas)
Je suppose que l’ancêtre aurait dû l’avoir défini ici :
OK, un peu plus d’informations.
Lorsque le sondage est rendu (en tant qu’arbre de widgets), cette ligne est exécutée, mais lorsque vous revenez pour voter, elle ne l’est pas, donc pour une raison quelconque, il n’y a pas d’ancêtre avec un “_emberView” (Ou il n’est pas trouvé)
La source de ce problème pourrait être que le widget n’est jamais réaffiché :
rerenderWidget() {
N’est pas à nouveau déclenché malgré l’ajout d’un nouvel arbre de widgets… donc cette propriété n’est jamais définie.
… ainsi la solution à cela pourrait être de planifier un ré-rendu lorsque le bouton Voter est activé…
Le plugin de sondage est un peu inhabituel en ce sens que le widget est monté à l’intérieur du HTML cuit d’un article, plutôt qu’à l’intérieur d’un modèle Ember via le composant <MountWidget>. Nous aurons donc probablement besoin d’ajouter une logique supplémentaire ici… j’y jette un œil
Je pense que si nous fusionnons cela, cela devrait faire fonctionner votre code @merefield
Ce n’est pas particulièrement joli, mais je pense que c’est acceptable car c’est une situation assez rare, et nous espérons supprimer complètement tout ce code widget/RenderGlimmer dans un avenir pas trop lointain