이것이 Discourse의 버그일 수도 있지만 확실하지 않습니다. 제가 무언가를 잘못하고 있는 것일 수도 있죠.
user-card-post-names 커넥터에 정보를 추가하는 플러그인이 있습니다.
Handlebars:
Javascript:
이는 대부분의 작업을 수행하는 다음 Javascript를 호출합니다:
문제 상세:
이전 JS 코드에는 다음 두 줄이 있습니다:
var version = userModel.custom_fields && userModel.custom_fields["directoryopus_link_version"];
var edition = userModel.custom_fields && userModel.custom_fields["directoryopus_link_edition"];
그 후 if (version || edition) { ... 테스트를 수행하고, 결과에 따라 일부 문자열(opusLinkClass, opusLinkIcon, opusLinkText)을 생성한 다음 이를 저장합니다:
component.set("opusLinkClass", opusLinkClass);
component.set("opusLinkIcon", opusLinkIcon);
component.set("opusLinkText", opusLinkText);
이 문자열들은 이 게시물의 시작 부분에 있는 handlebars 파일에서 사용됩니다.
브라우저의 로그 창에는 오류나 경고가 전혀 표시되지 않지만, 때때로 문제가 발생합니다.
저는 두 개의 custom_fields가 모두 설정된 계정으로 테스트하고 있으므로, if (version || edition) 테스트는 항상 첫 번째 분기를 따라야 하며, 그 아래에 있는 else if (!viewingStaff) 분기를 따라서는 안 됩니다.
그러나 때로는 두 번째 분기를 따르는데, 이는 version과 edition이 설정되지 않았음을 의미합니다.
이것은 보통 발생하지 않아서 이것이 Discourse의 버그일 것이라고 생각합니다.
새로운 스레드를 생성한 후 답글을 달거나, 방금 작성한 답글을 수정할 때만 문제가 발생하는 것 같습니다. 어떤 상황에서는 커넥터가 실행될 때 userModel 객체가 올바르게 초기화되지 않는 것처럼 보이는데, 어딘가에 레이스 컨디션(race condition)이 있기 때문일까요?
이것은 스레드당 한 번만 발생하는 것 같습니다. F5 키로 페이지를 새로고침하면 모든 것이 다시 정상적으로 작동하며, 해당 스레드에 대해 계속 정상적으로 유지됩니다. (최소한 제가 알 수 있는 범위 내에서요. 반(半)무작위로 발생하기 때문에 같은 스레드에서 다시 발생한 것을 보지 못한 것일 수도 있습니다.)
시간 내어 조언해 주셔서 감사합니다.