2012-10-22 3 views
11

저는 Ember를 한동안 사용해 왔지만 때로는 최선의 방법을 찾기 위해 고생하고 있습니다. 그래서 컨트롤러와 뷰에 관한 엠버의 방법 중 하나가컨트롤러의 여러 인스턴스를 표시하십시오.

엠버의 디자이너의 의견, 즉이 라우터에 의해 강제되는 것은 그 주어진 기본 이름 (예 : "응용 프로그램", "CustomerEntry", "내 항목")에 대한 BaseNameView와 BaseNameController가 있어야합니다. - Ember guide

문제는 페이지에서 동일한보기의 여러 인스턴스를 원하는 경우입니다. 컨트롤러는 응용 프로그램을 시작하는 동안 만들어지기 때문에 응용 프로그램 네임 스페이스 아래에있는 싱글 톤이므로 모델 데이터의 두 인스턴스를 보유 할 수 없습니다.

하나의 솔루션은 컨트롤러 (및 모델 데이터)를 수동으로 생성하고 뷰에 전달하는 것입니다. 하지만이 경우 Ember가 자동으로 컨트롤러를 만들지 않기를 바랍니다. 다시 말해, Ember가 응용 프로그램 시작 중에 컨트롤러를 싱글 톤으로 만드는 이유는 무엇입니까?

+0

동일한 컨트롤러의 인스턴스가 여러 개 필요합니까? 당신이 필요로하는 고유 한보기와 ​​관련된 다른 컨트롤러를 가질 수있는 것처럼 들립니다. 컨트롤러는 모델 데이터의 다른 인스턴스를 보유하지 않으며 일반적으로 바인딩을 사용하여 뷰에 데이터를 프록시합니다. Ember 아키텍처에 대한 나의 이해는 View를 사용하는 아이디어가 DOM/CSS에 대한 책임이며 사용자 이벤트를 처리한다는 것입니다. 응용 프로그램 논리는 라우터/컨트롤러 수준으로 유지되므로 같은 데이터를 프록시해도 여러 개의 고유 한 컨트롤러가있는 것이 좋습니다. –

답변

2

View 유형에 해당 Controller 유형이없는 경우가 많이 있다고 생각합니다. 특히보기 유형이 본격적인 응용 프로그램 기능보다 UI 위젯에 가까울 때 특히 그렇습니다. 많은 뷰가 동일한 컨트롤러를 공유 할 수 있습니다. 이 applicationView 템플릿에서 살펴 보자 :

<h1>Here are two files, compare them</h1> 
{{view App.MyFileView contentBinding="leftFileContent"}} 
{{view App.MyFileView contentBinding="rightFileContent"}} 

이 내 뷰 클래스의 두 인스턴스를 생성하고와 ApplicationController에 두 개의 서로 다른 속성에 자신의 콘텐츠 속성을 결합한다. 이 두보기 모두의 controller 특성은 singleton applicationController 인스턴스로 설정됩니다.

컨트롤러가 싱글 톤인 이유 중 하나는 App.router.myController과 같은 것을 통해 글로벌 네임 스페이스에서 처리 될 수 있다는 것입니다.

+0

controllerBinding 속성을 사용하는 것은 어떻습니까? –

관련 문제