Ember.js의 뷰와 컴포넌트


143

ember.js를 배우고 있으며 뷰와 구성 요소의 차이점을 이해하려고합니다. 재사용 가능한 구성 요소를 만드는 방법으로 두 가지를 봅니다.

Ember의 웹 사이트에서 조회 :

Ember.js의 뷰는 일반적으로 단지 다음과 같은 이유로 생성됩니다 :
당신이 사용자 이벤트의 정교한 처리가 필요합니다 - 언제
당신이 만들 - 언제 재사용 가능한 구성 요소를

구성 요소에 대한 Ember 웹 사이트에서 :

구성 요소는 JavaScript를 사용하여 동작을 구현하고 핸들 바 템플릿을 사용하여 모양을 설명하는 사용자 정의 HTML 태그입니다. 응용 프로그램 템플릿을 단순화 할 수있는 재사용 가능한 컨트롤 을 만들 수 있습니다.

그렇다면 뷰와 컴포넌트의 주요 차이점은 무엇입니까? 그리고 구성 요소에 대한 뷰를 사용하거나 그 반대의 경우를 선호하는 일반적인 예는 무엇입니까?

답변:


170

Ember.View

Ember.View는 현재 W3C에 의해 당신을 위해 생성 된 태그로 제한됩니다. 그러나 고유 한 응용 프로그램 별 HTML 태그를 정의한 다음 JavaScript를 사용하여 동작을 구현하려면? 실제로 Ember.View로는 이 작업을 수행 할 수 없습니다 .

Ember.Component

이것이 바로 컴포넌트가 할 수있는 일입니다. 사실, W3C가 현재 커스텀 엘리먼트 스펙 에서 작업하고 있다는 것은 좋은 생각입니다 .

Ember의 구성 요소 구현은 가능한 한 웹 구성 요소 사양과 밀접한 관련이 있습니다. 일단 사용자 정의 요소가 브라우저에 광범위하게 사용할 수 있습니다, 당신은 쉽게 W3C 표준에 엠버 구성 요소를 마이그레이션 할 수 잘 새로운 표준을 채택한 것과 그들이 다른 프레임 워크에 의해 사용할 수 있어야합니다.

구성 요소 구현이 웹 플랫폼의 로드맵과 일치하도록 표준 기관과 긴밀히 협력하고 있습니다.

또한 Ember.Component 는 실제로 Ember.View (하위 클래스)이지만 완전히 격리되어 있습니다. 템플릿의 속성 액세스는 보기 개체 로 이동 하고 작업은 보기 개체를 대상으로합니다. 주변 context또는 외부에 대한 controller 모든 컨텍스트 정보가 전달 되지 않습니다. 이것은 Ember.View 의 경우가 아닙니다. 실제로 주변 컨트롤러에 액세스 할 수 있습니다. 예를 들어 뷰 내부 this.get('controller')에서 현재보기와 연관된 컨트롤러.

그렇다면 뷰와 컴포넌트의 주요 차이점은 무엇입니까?

따라서 구성 요소와의 주요 차이점은 사용자가 자신의 태그를 만들 수있게하고 나중에 사용자 지정 요소 를 사용할 수 있는 시점에서 사용자 지정 요소 를 지원하는 다른 프레임 워크에서 해당 구성 요소를 마이그레이션 / 사용하는 것입니다. 특정 구현 사례에 따라 다소 오래된 뷰를 만듭니다.

그리고 구성 요소에 대한 뷰를 사용하거나 그 반대의 경우를 선호하는 일반적인 예는 무엇입니까?

위의 내용을 따르면 이는 사용 사례에 따라 다릅니다. 그러나 일반적으로 뷰에서 주변 컨트롤러 등에 액세스 해야하는 경우 Ember.View를 사용 하지만 뷰를 분리하고 컨텍스트를 무시 하고 작동시키는 데 필요한 정보 만 전달하려는 경우 훨씬 더 재사용이 가능한 Ember.Component를 사용하십시오 .

도움이 되길 바랍니다.

최신 정보

Road to Ember 2.0 을 게시하면 대부분의 경우 뷰 대신 컴포넌트를 사용하는 것이 좋습니다.


1
구성 요소에 대한 나의 유일한 관심사는 구성 요소가 복잡해질 때입니다. 논리 부분을 렌더링 부분과 분리하는 방법을 아직 모릅니다. 나는 정기적 인 견해를 가지고 있으며,이 분리가 있고 논리를 컨트롤러에 넣을 수는 있지만 구성 요소를 사용하면 매우 복잡하고 어쩌면 큰 혼란을 겪게 될 것입니다. 구성 요소에 대한 전용 컨트롤러와 같은 것을 정의 할 수 있는지 알고 있습니까? 또는 구성 요소는 복잡한 그래픽 요소를 관리하기위한 것이 아닙니다.
sly7_7

3
@ sly7_7, 네 요점을 알 수 있습니다. 그러나 구성 요소는 전달되는 데이터를 기반으로 만 동작하는 블랙 박스라고 생각합니다. 그리고 그것이 수행하는 작업에 따라 매우 빠르게 엉망이 될 수 있습니다. 전용 컨트롤러는 절대적으로 의미가 있으며 구성 요소가 논리적으로 주입 될 수 있다면 작동 할 수있는 방법이지만 구성 요소가 설계에 의해 엠버 컨테이너의 일부가 아니라는 것을 알고 있지만 앞으로는 변경 될 수 있습니다. 이와 같은 것을 정확하게 해결하십시오. 어쨌든 좋은 지적!
intuitivepixel

2
바인딩 이 구성 요소에서 벗어날 수 있습니까? IE, 구성 요소의 블록 형식을 사용하면 블록의 내용 요소가 구성 요소의 속성에 바인딩 될 수 있습니까?이 경우 뷰를 사용해야합니까?
Michael Johnston

2
아, 그렇습니다. {{view.xxxx}}뷰에서와 동일한 구성 요소에서 작동합니다.
Michael Johnston


17

답은 간단합니다. 컴포넌트 사용

Yehuda Kats와 Tom Dale (Ember Core Team Members)은 2013 년 8 월에 녹화 된 교육 비디오에 따르면 사용자가 프레임 워크 개발자가 아닌 한 뷰를 사용하지 말라고 청중에게 말했습니다. 핸들 바가 많이 향상되었으며 구성 요소가 도입되었으므로 더 이상 뷰가 필요하지 않습니다. 내부적으로 뷰는 {{#if}} 및 {{outlet}}과 같은 기능을 제공하는 데 사용됩니다.

구성 요소는 브라우저에 구축 될 웹 구성 요소 표준과 매우 유사하므로 Ember 구성 요소를 편안하게 구축하는 데 많은 부수적 인 이점이 있습니다.

2014-11-27 업데이트

Ember 2.0은 컨트롤러 / 뷰 대신 경로를 입력 할 때 라우팅 가능 컴포넌트를 사용하므로 뷰 대신 컴포넌트를 사용하는 것이 더욱 중요합니다. 나중에 앱을 증명하려면 뷰에서 멀리 떨어져있는 것이 가장 좋습니다.

출처 :


5
"뷰를 사용해야한다고 생각되면 대신 컴포넌트를 사용하십시오." 끔찍한 조언이며 구성 요소와 관련된 격리에 대한 이해 부족을 배신합니다.
jmcd

@jmcd, 그 의견은 프레임 워크 개발자 자체에서 나왔지만 그것을 꺼 냈습니다.
Johnny Oshika

2
출처 : Gaslight 비디오 교육, 비디오 10.3 컴포넌트 Q & A @ 26m 마크. Tom은 다음과 같이 말합니다.``이러한 예제가 작성되었으므로 ... 예제를 작성할 때 존재하지 않는 구성 요소를 추가했습니다. 일반적으로 뷰는 대부분의 개발자가 작성하는 것으로 예상되는 것이
아니라이

2
@jmcd, 26:15의 비디오에서 Tom은 "기본적으로 뷰를 사용하지 않습니다"라고 말합니다. 또한 같은 비디오에서 30m로 점프하면 Yehuda Katz는 다음과 같이 말합니다. "View는 기본적으로 내부 구현 세부 사항입니다. View를 사용할 수는 있지만 프레임 워크 개발자입니다. View를 사용하고 View에 가장 가깝지만 의미가 더 좋은 것은 Component입니다. 이전에 View를 사용할 수 있었던 것은 Component입니다. "
Johnny Oshika

5

v2.x현재 안정적인 릴리스 이므로 현재는 더 이상 사용되지 않습니다. Ember 2.0 API에서 뷰가 제거되고 있다고합니다 .

따라서 {{view}}Ember 2.0에서 키워드를 사용 하면 어설 션이 트리거됩니다.

어설 션 실패 : 사용 {{view}}또는 경로를 기반으로하는 경로가 Ember 2.0에서 제거되었습니다.

Ember 2.0에서 뷰를 사용해야하는 경우 ember-legacy-views addon을 사용할 수 있으며 버전 2.4까지 Ember와 호환됩니다 .

요약하자면, 구성 요소는 현재 (보기가 제거됨) 미래입니다. 또한 컨트롤러를 대체 할 것입니다. 라우팅 가능 구성 요소 RFC를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.