Tentativa de anexar Glimmer falha com erro

Estou trabalhando em um PR para o plugin Poll.

Estou tentando renderizar um Glimmer Component como uma folha de árvore de widget, como fiz várias vezes antes, mas estou recebendo este erro estranho que nunca vi antes:

TypeError: this.parentMountWidgetComponent is undefined

Ocorrendo nesta linha:

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

é undefined.

(this.widget existe)

Meu código em estágio inicial está aqui:

É legal usar RenderGlimmer neste contexto?

1 curtida

Isso depende de um ancestral ter essa propriedade?

this._findAncestorWithProperty("_emberView")

que retorna undefined.

Ou ele mesmo ter um _emberView (o que não tem)

Estou supondo que o ancestral deveria ter sido definido aqui:

Ok, mais algumas informações.

Quando a Enquete é renderizada (como uma árvore de widgets), esta linha é executada, mas quando você volta para votar, ela não é, portanto, por algum motivo não há um ancestral com um “_emberView” (Ou ele não está sendo encontrado)

A origem deste problema pode ser que o widget nunca é re-renderizado:

rerenderWidget() {

Não é acionado novamente, apesar de adicionar uma nova árvore de widgets… então essa propriedade nunca é definida.

… portanto, a solução para isso pode ser agendar uma re-renderização quando o botão Votar for pressionado …

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

… não, isso não resolve.

Mais informações:

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

Isso está procurando na árvore pela propriedade.

Na visualização inicial, isso aparece no nível post-stream.

Mas de alguma forma os widgets parecem estar perdendo sua ancestralidade…

OK, então investiguei um pouco mais:

Esta é a hierarquia em que a travessia do widget ocorre:

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

Agora, o último widget existente… não tem widget pai.

parentWidget é undefined.

E o detalhe é que ele não tem a propriedade “_emberView”, então o resultado é undefined.

Portanto, a propriedade nunca é encontrada e nesse ponto a travessia para.

3 curtidas

O plugin de enquete é um pouco incomum, pois o widget é montado dentro do HTML processado de uma postagem, em vez de diretamente dentro de um template Ember através do componente <MountWidget>. Portanto, provavelmente precisamos adicionar alguma lógica extra aqui… darei uma olhada :eyes:

Obrigado por relatar, @merefield!

3 curtidas

Acho que se mesclarmos isso, deve fazer seu código funcionar @merefield

Não é particularmente bonito, mas acho que está tudo bem, já que esta é uma situação bem rara, e esperamos remover completamente todo esse código de widget/RenderGlimmer em um futuro não muito distante :crossed_fingers:

4 curtidas

Obrigado, David. Sim, faz sentido que um compromisso possa ser suficiente por enquanto :+1:

Vou testar assim que/se for mesclado (e terei que atualizar meu fork! :sweat_smile:)

4 curtidas

Realmente aprecio o rápido retorno sobre este, David.

Posso confirmar que agora está funcionando para mim.

Postarei aqui se encontrar mais algum problema com este arranjo.

(Observação sobre a captura de tela: Dias muito iniciais para este projeto!)

2 curtidas

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