2014-10-16 2 views
0

계정이나 그룹을 관리 할 것인지 선택할 수있는 컨트롤이있는 페이지가 있습니다. 그런 다음 사용자가 작업하고자하는 내용에 맞는 템플릿을 렌더링 할 핸들 막대에 콘센트가 있습니다 ({{outlet workbench}}). 이 정도 생겼습니다, 그룹,콘센트에있을 때 ArrayController를 반복 할 수없는 이유는 무엇입니까?

@render('account/link/workbench', { 
    into : 'account/link' 
    outlet : 'workbench' 
    controller : 'accountLink' 
    }) 

을 :하지만

이 계정에 대해 잘 작동

@render('account/link/groups', { 
    into : 'account/link' 
    outlet : 'workbench' 
    controller : 'accountGroup' 
    }) 

같은 기본 클래스에서 AccountLinkControllerAccountGroupController 상속 둘 - TableController -하는 ArrayController입니다. 문제는 AccountGroupController에있는 자식 컨트롤러를 반복 할 수 없다는 것입니다. (즉, this.map과 같은 함수는 항상 빈 배열을 반환합니다. 템플릿에서 {{#each}}을 사용하여 AccountGroupController의 항목을 반복 할 수 있습니다.) 그러나 모든 것은 AccountLinkController에서 올바르게 작동합니다. 나는이 둘 사이를 생각할 수

유일한 차이점은 페이지가 그래서 AccountGroupController 일어나고 있지 않은 AccountLinkController을 설정하는 몇 가지 엠버 매직이 있어야 AccountLinkRoute로 설정되어 있다는 점이다.

어디로 갈까요?

감사합니다.

답변

2

오른쪽 흔적에 있습니다. 엠버 워크 플로우는 여기에서 정말로 중요합니다. URL로 이동하면 Ember는 URL을 분석하여 라우터에 매핑합니다. 그 시점에서 Ember는 URL의 일부인 각 리소스/경로에서 모델을 가져와야한다는 것을 알고 있습니다. 일단 모든 모델을 가져 오면 연결된 컨트롤러로 장식합니다. 여기서 바로 문제의 위치를 ​​설명합니다. 컨트롤러 만 사용한다고해서 모델을 가져 오지는 않습니다.

특정 컨트롤러를 사용하려는 경우 controllerFor을 사용하여 수동으로 모델을 얻을 수 있습니다.

// get some model 
var controller = this.controllerFor('accountGroup'); 
controller.set('model', model); 
@render('account/link/groups', { 
    into : 'account/link' 
    outlet : 'workbench' 
    controller : controller 
    }) 
+0

올바른 방향으로 나를 보내고있는 것처럼 보입니다. 이 콘트롤러의 추악한 부분들 (예상대로 작동하는'AccountLinkController'뿐만 아니라)은'content'가 라우트에 연결된 모델이 아니라 계산 된 프로퍼티라는 것입니다. 그래서, 나는 콘텐츠에서 올바른 모델을 얻고 있습니다. 템플릿에서'{{#each}} '로 반복 할 수는 있지만 컨트롤러에서'@forEach()'를 사용하여 반복 할 수는 없습니다. – spinlock

관련 문제