Poll 플러그인에 대한 PR을 작업 중입니다.
과거에 여러 번 했던 것처럼 Glimmer 컴포넌트를 위젯 트리 리프로 렌더링하려고 하는데, 이전에 본 적 없는 이상한 오류가 발생합니다:
TypeError: this.parentMountWidgetComponent is undefined
해당 오류는 이 줄에서 발생하고 있습니다:
this.widget?._findView() || this._emberView
가 undefined인 것 같습니다.
(this.widget은 존재합니다)
아직 초기 단계인 제 코드는 여기에 있습니다:
이 컨텍스트에서 RenderGlimmer를 사용하는 것이 허용됩니까?
이것이 조상이 해당 속성을 가지고 있다는 데 의존하는 건가요?
this._findAncestorWithProperty("_emberView")
이것이 undefined로 반환됩니다.
아니면 자기 자신에게 _emberView가 있는 경우(그렇지 않음)
조상이 여기서 설정되어 있어야 한다고 추측합니다:
OK, 좀 더 정보를 드리겠습니다.
Poll이 렌더링될 때(위젯 트리로), 이 줄이 실행되지만 투표로 전환하면 실행되지 않습니다. 따라서 어떤 이유에서인지 "_emberView"가 있는 조상이 없습니다(또는 발견되지 않습니다).
이 문제의 원인은 위젯이 다시 렌더링되지 않기 때문일 수 있습니다:
rerenderWidget() {
새로운 위젯 트리를 추가했음에도 불구하고 다시 트리거되지 않습니다 … 따라서 이 속성이 설정되지 않습니다.
… 따라서 해결책은 Vote 버튼을 눌렀을 때 재렌더링을 예약하는 것일 수 있습니다 …
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 레벨에 나타납니다.
하지만 어떻게든 위젯들이 계보(ancestry)를 잃어버리는 것 같습니다 …
네, 좀 더 파고들어 보았습니다:
위젯 탐색이 올라가는 계층 구조는 다음과 같습니다:
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가 됩니다.
따라서 해당 속성이 절대 발견되지 않고, 그 시점에서 탐색이 중단됩니다.
david
(David Taylor)
4
투표 플러그인은 위젯이 Ember 템플릿의 <MountWidget 컴포넌트를 통해 직접 삽입되는 것이 아니라, 게시물의 cooked HTML 내부에 마운트된다는 점에서 다소 비범합니다. 따라서 여기에는 몇 가지 추가 로직이 필요할 것 같습니다… 확인해 보겠습니다 
리포트해 주셔서 감사합니다 @merefield!
david
(David Taylor)
6
이 PR을 병합하면 @merefield 님의 코드가 정상적으로 작동할 것 같습니다.
별도로 깔끔하지는 않지만, 꽤 드문 상황이고 머지않아 이 widget/RenderGlimmer 관련 코드를 완전히 제거할 계획이므로 괜찮다고 생각합니다 
데이비드, 고마워. 네, 그 사이 타협안이 충분할 수 있다는 말이 맞는 것 같아 
병합되면(혹은 병합될 경우) 테스트해볼게 (그리고 포크도 업데이트해야 해!
)
데이비드, 빠른 처리 정말 감사합니다.
이제 정상적으로 작동하는 것을 확인했습니다.
이 구성과 관련하여 추가적인 문제가 발견되면 이곳에 게시하겠습니다.
(스크린샷 주의: 이 프로젝트는 아직 초기 단계입니다!)