Poll プラグインに PR を出しています。
以前も何度か行ったように、Glimmer コンポーネントをウィジェットツリーのリーフとしてレンダリングしようとしていますが、これまで見たことのない奇妙なエラーが発生しています。
TypeError: this.parentMountWidgetComponent is undefined
この行で発生しています。
this.widget?._findView() || this._emberView が undefined になっているようです。
(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
さて、最後の既存のウィジェットには親ウィジェットがありません。
parentWidget は undefined です。
さらに、_emberView プロパティがないため、結果は undefined になります。
したがって、プロパティが見つからず、その時点でトラバーサルは停止します。
「いいね!」 3
david
(David Taylor)
4
投票プラグインは少し特殊で、ウィジェットは MountWidget コンポーネントを介して直接Emberテンプレート内にマウントされるのではなく、投稿の調理済みHTML内にマウントされます。そのため、ここに追加のロジックが必要になる可能性があります…確認します 
報告ありがとうございます @merefield!
「いいね!」 3
david
(David Taylor)
6
これをマージすれば、@merefield さん、コードが動作するはずです。
特にきれいではありませんが、これは非常にまれな状況であり、近い将来にこのウィジェット/RenderGlimmer のすべてを完全に削除することを期待しているので、これで大丈夫だと思います 
「いいね!」 4
Davidさん、ありがとうございます。一時的な妥協案で十分だというのは理にかなっていますね 
マージされたら(そしてフォークを更新する必要があったら!)テストします 
「いいね!」 4
David、迅速な対応ありがとうございます。
これで問題なく動作することを確認しました。
この件で他に問題が見つかった場合は、こちらに投稿します。
(スクリーンショットに関する注意:このプロジェクトはまだ初期段階です!)
「いいね!」 2
system
(system)
クローズされました:
10
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.