El intento de adjuntar Glimmer falla con un error

Estoy trabajando en una PR para el plugin Poll.

Estoy intentando renderizar un Glimmer Component como una hoja de widget, como he hecho varias veces antes, pero estoy obteniendo este extraño error que no había visto antes:

TypeError: this.parentMountWidgetComponent is undefined

Se dispara en esta línea:

Parece que this.widget?._findView() || this._emberView

es undefined.

(this.widget existe)

Mi código en una etapa muy temprana está aquí:

¿Es legal usar RenderGlimmer en este contexto?

1 me gusta

¿Esto depende de que un ancestro tenga esta propiedad?

this._findAncestorWithProperty("_emberView")

que devuelve indefinido.

O que él mismo tenga un _emberView (que no tiene)

Supongo que el ancestro debería haberlo configurado aquí:

OK, un poco más de información.

Cuando se renderiza la Encuesta (como un árbol de widgets), esta línea se ejecuta, pero cuando vuelves a votar, no lo hace, por lo que por alguna razón no hay un ancestro con un “_emberView” (o no se encuentra)

La fuente de este problema podría ser que el widget nunca se vuelve a renderizar:

rerenderWidget() {

No se vuelve a disparar a pesar de agregar un nuevo árbol de widgets… por lo que esta propiedad nunca se establece.

… por lo tanto, la solución a esto podría ser programar una nueva renderización cuando se presiona el botón Votar …

  toggleResults() {
    **this.scheduleRerender();**
    this.state.showResults = !this.state.showResults;
  },

… no, esto no lo soluciona.

Más información:

  _findAncestorWithProperty(property) {
    let widget = this;
    while (widget) {
      const value = widget[property];
      if (value) {
        return widget;
      }
      widget = widget.parentWidget;
    }
  }

Esto busca la propiedad en el árbol.

En la vista inicial, esto aparece en el nivel post-stream.

Pero de alguna manera, los widgets parecen estar perdiendo su ascendencia…

OK, he investigado un poco más:

Esta es la jerarquía en la que ocurre la traversa del widget:

discourse-poll-option-dropdown-245da0f65a66dbd539bcd27e501d759a [widget.js:250:14](webpack://discourse/widgets/widget.js)

discourse-poll-option-245da0f65a66dbd539bcd27e501d759a [widget.js:250:14](webpack://discourse/widgets/widget.js)

poll-container-poll-1247 [widget.js:250:14](webpack://discourse/widgets/widget.js)

poll-poll-1247

Ahora, el último widget existente… no tiene widget padre.

parentWidget es undefined.

Y lo más importante es que no tiene la propiedad " _emberView", por lo que el resultado es undefined.

Así que la propiedad nunca se encuentra y en ese punto la traversa se detiene.

3 Me gusta

El plugin de encuestas es un poco inusual en el sentido de que el widget se monta dentro del HTML cocido de una publicación, en lugar de directamente dentro de una plantilla de Ember a través del componente <MountWidget>. Así que probablemente necesitemos agregar algo de lógica adicional aquí… le echaré un vistazo :eyes:

¡Gracias por informar, @merefield!

3 Me gusta

Creo que si fusionamos esto, debería hacer que tu código funcione @merefield

No es particularmente bonito, pero creo que está bien ya que es una situación bastante rara, y esperamos eliminar por completo todo este código de widget/RenderGlimmer en un futuro no muy lejano :crossed_fingers:

4 Me gusta

Gracias David. Sí, tiene sentido que un compromiso pueda ser suficiente mientras tanto :+1:

Lo probaré una vez que se fusione (¡y tendré que actualizar mi fork! :sweat_smile:)

4 Me gusta

Realmente aprecio la rápida respuesta en este caso, David.

Confirmo que ahora esto funciona para mí.

Publicaré aquí si encuentro algún problema adicional con este acuerdo.

(Advertencia sobre la captura de pantalla: ¡Muy pronto para este proyecto!)

2 Me gusta

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