Glimmerの添付に失敗しました。エラーが発生しました

Poll プラグインに PR を出しています。

以前も何度か行ったように、Glimmer コンポーネントをウィジェットツリーのリーフとしてレンダリングしようとしていますが、これまで見たことのない奇妙なエラーが発生しています。

TypeError: this.parentMountWidgetComponent is undefined

この行で発生しています。

this.widget?._findView() || this._emberViewundefined になっているようです。

(this.widget は存在します)

私の非常に初期段階のコードはここにあります。

このコンテキストで RenderGlimmer を使用することは合法ですか?

「いいね!」 1

これは、祖先にこのプロパティがあることに依存していますか?

this._findAncestorWithProperty("_emberView")

これは未定義で返されます。

または、それ自体が _emberView を持っている(持っていませんが)

祖先にはここで設定されているはずだと推測しています。

なるほど、もう少し情報があります。

投票が(ウィジェットのツリーとして)レンダリングされると、この行が実行されますが、投票に戻ると実行されません。そのため、何らかの理由で _emberView を持つ祖先が存在しない(または見つからない)のです。

この問題の原因は、ウィジェットが再レンダリングされないことかもしれません。

rerenderWidget() {

新しいウィジェットのツリーを追加しても、再び呼び出されません。そのため、このプロパティは設定されません。

したがって、この解決策は、投票ボタンが押されたときに再レンダリングをスケジュールすることかもしれません…

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

…いいえ、これは解決しません。

追加情報:

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

これは、プロパティをツリーの上方向に検索しています。

最初のビューでは、これは post-stream レベルにあります。

しかし、何らかの理由でウィジェットは祖先を失っているようです…

了解しました。さらに調査しました。

ウィジェットのトラバーサルが発生する階層は次のとおりです。

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

さて、最後の既存のウィジェットには親ウィジェットがありません。

parentWidgetundefined です。

さらに、_emberView プロパティがないため、結果は undefined になります。

したがって、プロパティが見つからず、その時点でトラバーサルは停止します。

「いいね!」 3

投票プラグインは少し特殊で、ウィジェットは MountWidget コンポーネントを介して直接Emberテンプレート内にマウントされるのではなく、投稿の調理済みHTML内にマウントされます。そのため、ここに追加のロジックが必要になる可能性があります…確認します :eyes:

報告ありがとうございます @merefield

「いいね!」 3

これをマージすれば、@merefield さん、コードが動作するはずです。

特にきれいではありませんが、これは非常にまれな状況であり、近い将来にこのウィジェット/RenderGlimmer のすべてを完全に削除することを期待しているので、これで大丈夫だと思います :crossed_fingers:

「いいね!」 4

Davidさん、ありがとうございます。一時的な妥協案で十分だというのは理にかなっていますね :+1:

マージされたら(そしてフォークを更新する必要があったら!)テストします :sweat_smile:

「いいね!」 4

David、迅速な対応ありがとうございます。

これで問題なく動作することを確認しました。
この件で他に問題が見つかった場合は、こちらに投稿します。

(スクリーンショットに関する注意:このプロジェクトはまだ初期段階です!)

「いいね!」 2

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