아, 미안합니다. 말씀이 맞으시네요. Outlets(보통은)에서는 하나의 Theme Component에 템플릿 파일을 하나 이상 게시하는 것이 합법적인 것 같습니다(Theme Component와 플러그인 간의 충돌을 처리하므로 모두 렌더링될 수 있다는 점은 알고 있었습니다). 흥미롭네요.
그런데 제 생각에는: 왜 그렇게 하고 싶으신가요? 레이아웃에 대한 제어력이 줄어들지 않나요?
하나의 템플릿은 원하는 수의 하위 컴포넌트를 사용하여 전체 레이아웃을 한 번에 구성하도록 강제하지 않나요?
Featured Lists 컴포넌트를 빠르게 살펴본 후, 문제가 무엇인지 더 명확하게 파악했습니다. 한 가지 옵션은 해당 컴포넌트를 리팩토링하여 모든 목록을 하나의 Ember 컴포넌트로 출력하도록 하는 것입니다. 그런 다음 그 컴포넌트를 플러그인 래퍼 아웃렛에 추가할 수 있습니다.
또 다른 옵션은 커스텀 홈 페이지 템플릿에 두 번째 플러그인 아웃렛을 추가하는 것입니다. 예를 들어 <PluginOutlet @name="below-custom-homepage"/>와 같은 형식입니다.
솔직히 말하면, 관리자용 메시지로 이 custom-homepage 아웃렛을 유지하는 데는 큰 이유가 없습니다. 그 경고가 그렇게 유용하지도 않으니까요…
네, 그 부분은 까다로울 수 있습니다. 방금 로컬 테스트를 해보았는데, /custom에서는 제대로 작동하지 않습니다. 라우팅이 올바르게 이루어지려면 /를 사용하는 것이 더 좋습니다. 하지만 여전히 하이라이트가 되지 않습니다.
이것은 일반적인 문제인 것 같습니다. / 를 사용해도 랜딩 페이지로 설정된 다른 라우트도 하이라이트되지 않습니다.
네, 경고가 다르게 표시되는 것도 상상할 수 있습니다. 래퍼 아웃렛의 주요 이점은 코어 코드를 조건부로 yield 하거나 커스텀 코드를 렌더링할 수 있다는 것입니다. 하지만 그 정보 메시지에 대해서는 그런 경우가 거의 없을 것입니다.
오해가 있는 것 같습니다. 해당 컴포넌트는 이미 모든 목록을 하나의 래핑 컴포넌트 안에 감싸서 주어진 아웃렛에 렌더링하고 있습니다:
따라서 현재 커스텀 홈 페이지의 래퍼 아웃렛에 해당 컴포넌트를 문제없이 추가할 수 있습니다.
제가 할 수 없는 것은 커스텀 홈 페이지에서 그 아웃렛을 사용하여 독립형 컴포넌트 하나 이상을 렌더링하는 것입니다. 테마 컴포넌트로 설치했을 컴포넌트들, 예를 들어 이 세 가지처럼요:
커스텀 홈 페이지를 구축하기 위해 이러한 독립형 테마 컴포넌트 여러 개를 사용하는 것이 일반적인 접근 방식이라고 생각합니다. 하나의 테마에서 처음부터 끝까지 모두 구축하는 것보다는요.
다른 아웃렛을 추가하거나 아웃렛 구성을 변경하는 것을 고려 중이시라면, 제가 지금까지 사용하면서 느낀 점을 더 자세히 피드백해 드릴 수 있습니다. 다만 그 토끼 구멍을 디테일로 감싸게 될 것입니다
아웃렛이 main-outlet 요소 내부에서 렌더링된다는 것을 깨달았습니다. 이 요소들의 전체 구조는 다음과 같습니다:
main-outlet 래퍼
sidebar-wrapper
main-outlet
custom-homepage 아웃렛
디자이너로서, 이 아웃렛을 사용하여 커스텀 홈 페이지에서 항목을 배치하는 것은 그렇게 유연하지 않습니다. 위에서 공유한 디자인의 경우, 여러 컴포넌트를 배치할 수 있을 뿐만 아니라 main-outlet 요소 내부에 컴포넌트를 중첩하지 않기 때문에 before-main-outlet 아웃렛을 사용했습니다.
위 스크린샷에 공유한 구조는 다음과 같습니다:
main-outlet 래퍼
sidebar-wrapper
component: search banner
component: featured topics
component: featured lists
main-outlet
장점은 main-outlet 요소 내부에서만이 아니라 main-outlet 래퍼의 전체 너비로 요소를 배치할 수 있다는 것입니다. 이 점을 설명하기 위해, 현재 custom-homepage 아웃렛에 컴포넌트 중 하나를 렌더링하면 main-outlet 요소 내부에 중첩되어 다음과 같이 렌더링됩니다:
Featured Lists 컴포넌트를 사용해 봤는데, 이미 해당 컴포넌트를 모든 곳에 표시하도록 설정하는 옵션이 있습니다. 이 설정에는 관리자 라우트가 포함되지 않지만, 그 외 모든 곳(정적 페이지, 사용자 프로필 등)에서 시도해 보니 커스텀 홈페이지를 제외하고는 모든 곳에서 정상적으로 동작하는 것으로 보입니다.
또 다른 이상한 점은 언급했듯이 첫 번째 목록만 필터링이 되지 않는다는 것입니다. 예를 들어 여기서는 두 개의 목록을 필터링하고 있는데, 하나는 ‘featured’ 태그를 위한 것이고 다른 하나는 ‘General’ 카테고리를 위한 것입니다. 다른 모든 라우트에서 목록은 다음과 같이 표시됩니다:
해당 저장소의 sample-list 컴포넌트는 featured 태그가 붙은 주제만 가져와야 하지만, 그렇지 않습니다(제 환경에서는 처음 3개의 주제가 가져와집니다). 해당 테마의 about.json 파일에서 custom_homepage 수정자를 제거하면 올바른 주제가 가져와집니다.