2013-03-16 4 views
0

Ember에서 중첩 된 객체에 많은 (아픈) 문제가 있습니다. 나는 그것이 상당히 표준적인 일이라고 의심하기 때문에 내가 잘못한 방식으로 태클을하고있는 것 같아요.Ember JS : 중첩 된 객체 및 아키텍처

"많은"B가 있고 각각의 B에는 "C"가 많은 객체 A가 있다고 가정 해보십시오.이 아키텍처는 기본적으로 내 관계형 DB 스키마와 일치합니다.

중첩 된 경로가 필요하지 않으므로 A와 같은 개체를 자연스럽게 렌더링하는 방법으로 partials를 사용하는 것이 좋습니다. A에 대한

템플릿 : 같은 뭔가

...A stuff... 
{{#each Bs}} 
    {{ partial "show_B" }} 
{{/each}} 

등등.

문제는 자식 개체에 자체 컨트롤러가 있어야한다는 것입니다. RC1 (http://emberjs.com/blog/2013/02/15/ember-1-0-rc.html) 이래로 새로운 itemController가 있다는 것을 알고 있지만 유용하지는 않습니다. 계층 구조에서 더 아래로, C 개체는 각각 하나의 D 개체를 가지고 있다고 가정 해 봅시다. 그래서 C 템플릿은 다음과 같이 보일 것이다 :

... C stuff... 
{{#with c.D}} 
    {{ partial "show_D" }} // How do I get this partial to have its own controller? 
{{/with}} 

나는 새로운 {{control}} 여기에 도움이 될 것 같아요,하지만 난 (문맥이 제대로 설정되지 않은)을 사용하여 문제를 많이 가지고 있어요. 또한 방금 추가 된 것 (아직 개발 중이다)이라면 다른 방법이 있어야한다는 것을 의미합니다. 마지막으로 두 개의 서로 다른 API를 사용하는 것이 다소 이상하다고 생각합니다. 항목 목록에 대해서는 "itemController", 단일 항목에 대해서는 "{{control}}"- 하루가 끝날 때 객체를 컨트롤러 모두.

누군가 나를 올바른 방향으로 안내 할 수 있습니까?

감사합니다.

PJ

답변

0

난 당신이 올바른 방향으로 이미 생각합니다. control을 사용해야합니다. 나는 그것이 그것이 추가 된 이유라고 생각합니다.

itemControllercontrol의 차이는 여전히 동일한보기에있을 것입니다 및 템플릿 인라인 계속 control에 별도의 뷰를 필요로하는 반면 및 그래서 itemController는 해당보기/템플릿을 필요로하지 않는다는 것을 나에게 보인다 주형. control 중 하나 itemController 승리한다면

, 나는 그것이 현재 두 경우 모두 (배열과 단일 객체)에서 작동 현재 itemController을 대체 할 수 있기 때문에 control 것 같아요. 대신 itemController{{#each Bs}}에 대한 control을 사용했다면

주, 당신은 대신 partial의 컨트롤러, 뷰와 템플릿을 정의해야합니다 (또는 Ember.js이 당신을 위해 그 (것)들을 생성 할 수 있습니다).이처럼

:

{{#each Bs}} 
    {{control "showB" this}} 
{{/each}} 

그리고

는 D에 대한 :

{{control "showD" D}} 

하지만 난 당신과 동의, control 여전히 버그, 그리고 itemController 그것을하지 않는 control 너무 유사하다 둘 다 가지고있는 감각. 둘 다 상대적으로 새로운 것이기 때문에 그것이 어려움을 찾는 이유라고 생각합니다. 그러나이 github에 대한 토론 또는이다 discuss.ember.js.com

한 말도 해결 방법은 배열을 포함하는 D로 구성되어 계산 된 속성을 만들 each dArrayitemController :)를 사용하는 것입니다하지만 당신을 위해 control 작품을 만들려고 노력 분명히 낫다.

최악의 시나리오 인 경우 {{view}} 도우미를 사용하고보기에 일부 논리를 넣어 컨트롤러로 사용하도록 권장합니다 (권장하지는 않지만).

+0

테디에게 감사드립니다. 한 가지 문제는 각 블록 안에'{{control}} '을 넣는 것이 지금 당장은 효과가 없다는 것입니다. Cf : https://github.com/emberjs/ember.js/issues/1990. 그것은 나에게 많은 문제를 일으켰다. 해당 컨트롤러를 싱글 톤으로 수동으로 등록해야합니다. 이는 나에게 해킹 된 것처럼 느껴집니다. 사실, 지금 itemController와'{{control}}'은 콜렉션에서 다른 행동을합니다 ... 모든 것이 더 이상하게 생각합니다. – PJC

+0

해결 방법은 ** 싱글 톤이 아닌 **로 등록하는 것입니다. 사실, 그것은 해킹입니다. 그래서'control'이 여전히 깃발 뒤에 숨겨져 있습니다. (하지만 작동 시키면'itemController'와 동일하게 동작합니다.) –

+0

이 스레드는 다음을 보는 사람에게 도움이 될 수 있습니다 : http : //discuss.emberjs.com/t/control-vs-itemcontroller/493/10 – sandstrom