고맙습니다, @tshenry. 그룹 소유자 코드가 왜 안 먹혔는지는 잘 모르겠네요. 아마 플러그인 설정 방식 때문인 것 같습니다.
AJAX 방식을 “MVP” 방법으로 사용할 수 있음을 발견했습니다. 참고로 [forum-url]/groups.json으로 API 호출을 하면 사이트의 모든 그룹을 받아올 수 있고, 이후 이를 순환 처리할 수 있으므로 여러 번 호출할 필요가 없습니다.
다음과 같은 질문을 드리고 싶었습니다:
– AJAX/JSON API 방식을 사용할 때, 특정 페이지로 이동할 때만 함수가 실행되도록 하는 방법을 아시나요? 현재 커스텀 대시보드의 </head> 섹션에 AJAX 코드를 넣으면 동작은 하지만, 사이트가 로드될 때마다 실행됩니다(그룹 인덱스 페이지가 로드될 때만 실행되기를 원하는데 말이죠).
– 제 경우, AJAX를 사용하는 이유는 그룹 소유자 표시뿐만 아니라 추가하려는 그룹의 몇 가지 새로운 특성도 표시해야 하기 때문입니다. 이는 제가 검색하고 표시하려는 그룹의 사용자 정의 필드와 같은 것입니다. 현재 “MVP” 버전(아직 discourse 코드베이스가 어떻게 작동하는지 학습 중인 단계)은 이들을 discourse 데이터베이스가 아닌 별도의 데이터베이스에 저장하고, 그룹 인덱스 페이지에서 가져와 추가하는 방식입니다.
물론 더 깔끔한 해결책은 discourse 데이터베이스의 그룹에 사용자 정의 특성을 추가하고 이를 호출하는 것입니다. 여기에서 필요한 작업의 규모를 가늠해 보고 싶었습니다. 이 경우 discourse 파일들(컨트롤러, 모델, 템플릿)을 대거 다시 작성해야 하나요?
맞습니다. 제가 잊고 있었어요–저는 그것을 별도의 데이터베이스에도 저장하고 있고, 현재 AJAX(그리고 다른 몇 가지 마법 같은 것)를 호출하여 사용하고 있습니다.
훌륭한 아이디어입니다–저는 해당 저장소에서 if ((url == "/") || (url == "/latest") )을 어떻게 사용했는지 파악했습니다. 저도 유사한 것을 할 수 있을 것 같습니다.
네–저도 그 가이드와 제가 찾을 수 있는 다른 가이드들을 이미 살펴봤습니다. 훌륭한 가이드이지만, 그 가이드(그리고 메타의 다른 가이드들)에서 이러한 종류의 커스터마이징을 구현하는 단계로 넘어가는 것이 까다로웠습니다. 제 판단으로는 이러한 커스터마이징을 하려면 Discourse 코드베이스에서 템플릿, 컨트롤러, 모델이 어떻게 맞물려 있는지 정말로 이해해야 합니다.
소견
Ember는 성능 좋은 앱을 구축하기 위한 훌륭한 시스템일 수 있지만, 서로 다른 파일들이 어떻게 관련되어 있는지 파악하는 것이 어렵다고 느낍니다. 예를 들어, Github 저장소에서 뷰의 올바른 템플릿을 찾는 것만으로는 해당 템플릿이 어떤 다른 템플릿들과 연결되어 있는지, 그리고 특히 어떤 컨트롤러나 다른 모델들이 관련이 있는지 알 수 없습니다. 불가능하지는 않지만 진행 속도가 느리며, 이러한 커스터마이징을 하려면 그러한 관계들을 정말로 이해해야 합니다.
대안으로 Angular에서는 뷰 컴포넌트의 조각들이 보통 html, typescript, css 파일로 묶여 있고, 다른 관련 파일들은 이러한 파일들에서 명확하게 표시됩니다(사용 중인 서비스는 typescript 파일에서 식별되고, 삽입되는 다른 컴포넌트는 html 파일에서 명확하게 표시됨). 제가 볼 수 있는 한, Discourse의 ember 구조는 그렇게 작동하지 않는 것 같습니다(그 구조를 깎아내리려는 것이 아닙니다–매우 안정적이고 고성능의 앱이니까요–그냥 익숙해지는 데 시간이 좀 걸린다는 뜻입니다).
따라서 저는 discourse 조각들이 어떻게 맞물려 있는지 이해하는 것을 계속 시도하는 동안, 같은 결과를 얻기 위해 AJAX 같은 것을 사용하고 있습니다.