2016-12-11 5 views
1

에서 상위 구성 요소에서 구성 요소의 인스턴스 내가 "컨테이너"구성 요소를 가지고액세스 EmberJS

# components/container-component.js 

import Ember from 'ember'; 
export default Ember.Component.extend({ 
    displayComponent: 'simple-box' 
}); 

템플릿은 "컨테이너 구성 요소"인스턴스 내에서 지금

# templates/container-component.hbs 

<div> 
    {{component displayComponent}} 
</div> 

입니다. 어떻게 계산 된 "displayComponent"인스턴스에 액세스 할 수 있습니까?

내가 어떻게 할 수 있을지에 대한 아이디어가 있습니까? 나는 얻을 방법을 사용하면

나는 구성 요소의 문자열 ID를 얻을 내가 아는 한 부모 구성 요소의 JS 파일에서 아이들 구성 요소를 검색하는 기본 방법은 없다

this.get('displayComponent') 
# returns (String) 'simple-box' 
+0

해당 인스턴스로 무엇을 하시겠습니까? – ykaragol

+0

고마워, 내 의견 좀 봐 줄래? http://stackoverflow.com/questions/41089339/access-the-instance-of-the-component-from-parent-component-in-emberjs?noredirect=1#comment69398007_41089703 –

답변

4

. 이 작업을 실제로 수행하려면 내 twiddle을 참조하십시오.

코드에서 알 수 있듯이, 템플릿 내에서 부모는 자식에게 자신을 전달하고 자식은 자신을 부모에 등록합니다. 이것은 코드 냄새의 일러스트레이션이며 이는 내 프로젝트에서 결코 사용하지 않는 것임을 유의하십시오.

내 의견으로는 당신이 달성하려고 시도하는 것이 엠버가 만들어져있는 많은 원칙을 분명히 위반하고 있기 때문입니다. 왜 부모로부터 직접 자식 속성을 얻고 싶습니까? 하위 구성 요소에 작업을 등록하고 하위 구성 요소 내의 다양한 이벤트에 대한 알림을받을 수 있습니다. 왜 직접 액세스해야합니까? 구성 요소가 독립적으로 독립적으로 작동하는 것이 좋습니다. 이런 종류의 접근 방식에서는 하위 구성 요소의 내부 설계 고려 사항으로 상위 코드를 오염시킵니다. 부모 내에서 jquery를 통해 DOM 트리를 쿼리 할 수 ​​있지만 Ember 인프라에서 생성 한 하위 구성 요소 인스턴스를 가져 오는 것은 Ember의 접근 방식이 아닌 것을 설계하려고한다는 신호입니다. 우리는 귀하가 귀하의 의도를 설명하기 위해 다른 질문을 게시하거나이 질문을 수정하면 귀하를 더 잘 도울 수 있습니다. 누군가 당신을 더 나은 디자인으로 이끌 수 있습니다. 친애하는.

+0

뛰어난 설명. 감사! 예, 당신이 보여준 것과 같은 방식으로 구현했습니다. 예, 저는 원칙을 어기는 것 같습니다. 즉, 나는 그것을 다르게 시도하고 성취해야한다는 것을 의미한다. 그래서 저는 컴포넌트 간 통신을 원합니다. 부모 구성 요소에서 업데이트 할 특정 dom 요소가 필요하기 때문입니다. 그리고 그 반대 일 수 있습니다. "다양한 이벤트에 대해 통보 받기"라고 말한 것에 대해 설명해 주시겠습니까? 또한 저는 두 구성 요소가 공유 할 수있는 "서비스"를 갖고 있다고 생각합니다. 말이 돼? –

+0

제가 말하고자하는 것은 그것입니다; 하위 구성 요소는 필요한 경우에만 작업을 통해 상위 구성 요소에 알립니다. 이것은 자녀와 부모 사이의 명확한 분리를 제공 할 것입니다 (클라이언트는 다른 부모와 배치되어야하고 부모는 다른 자식을 포함해야합니다). 자녀의 변경 사항에 대해 부모에게 통보하려면 [공식 엠버 가이드] (https://guides.emberjs.com/v2.10.0/components/triggering-changes-with-actions/)를 참조하십시오. 희망적으로 저녁에 자녀 - 부모 간의 올바른 의사 전달 방법을 설명하기 위해 두 가지 새로운 트윗을 준비 할 것입니다. – alptugd

+0

서비스 공유에 관해서; 작은 트위들로 일부 코드를 보는 것이 더 나을 것입니다. 같은 경우에는 의미가 있지만 다른 경우에는 의미가 없어야합니다. 나는 아이에게 행동을 보내고 처음에는 부모에게서 그 행동을 다루기 위해 갈 것입니다. – alptugd