2015-01-24 4 views
0

독립 구성 요소가 구성 요소의 변경 또는 이벤트를 알리도록하려면 어떻게해야합니까?독립적 인 구성 요소는 어떻게 통신합니까?

예 :

<#user-social profile> 
    {{partial 'user-handle'}} 

    <div class='subtext'> 
    {{#reply-component}} {{/reply-component}} 
    </div> 

    <div class='replybox hide'> 
    <textarea></textarea> 
    <input type='button' value='Reply to user' /> 
    </div> 
</user-social profile> 

문제 : 답장 구성 요소 내부의 링크를 클릭 할 때 가시성을 전환 replybox를 원한다.

+1

reply-component 내부에서 'parentView'속성을 사용하여 사용자 - 소셜에 액세스 할 수 있습니다. 링크가 클릭되면 this.set ('parentView.isToggle', false)와 같은 부모 구성 요소의 값을 설정합니다. 그 값에 응답 상자를 바인드 할 수 있습니다. – blessenm

답변

4

구성 요소는 설계 상 격리되어 있습니다. 의존성을 지정하는 것은 귀하의 책임입니다. 바운드 속성을 자식에게 전달하거나 자식이 부모에서 트리거 할 동작을 지정하여 부모와 자식 구성 요소간에 통신 채널을 도입 할 수 있습니다.

의사 소통의 형태로 양방향 바인딩을 사용하는 것이 점차 안티 패턴으로 간주되므로 조치가 더 적합 할 것입니다. 예 :

{{#reply-component toggleReplybox="toggleReplybox"}} 

그런 다음, 자녀의 구성 요소 :

actions: { 
    whateverTriggersTheToggle: function() { 
    this.sendAction('toggleReplybox'); 
    } 
} 

당신은 하위 구성 요소 안에 뭔가에 whateverTriggersTheToggle 작업을 추가해야 할 것이다. 부모 구성 요소에서

: displayReplybox : 거짓, 이것은 당신의 replybox 요소 주위에 {{#if displayReplybox}} 래퍼를 추가하는 필요로 할

actions: { 
    toggleReplybox: function() { 
    this.set('displayReplybox', !this.get('displayReplybox')); 
    } 
} 

.

+0

"커뮤니케이션 형태로 양방향 바인딩을 사용하는 것이 점차 안티 패턴으로 간주되고 있습니다."- 나는 반대 의견을 가지고 있습니다 ... 이에 대해 엠버 코어 팀의 게시물/기사/짹짹/아무것도 있습니까? – andrusieczko

+1

"단방향 바인딩 기본적으로"라는 제목 아래 [The Ember 2.0 RFC 로의로드] (https://github.com/emberjs/rfcs/pull/15)에 언급되어 있습니다. (직접 링크 할 수 있기를 바랍니다.) Tom Dale과 Yehuda Katz도 [The Changelog에 출연] (http://thechangelog.com/131/)에서 그것에 대해 자세히 설명합니다. –

+0

와우, 고마워. 전에 그 글을 읽었는데 어떻게 든 그것을 놓쳤습니다. – andrusieczko

관련 문제