2013-04-10 2 views
1

렌더링을 통해 사용자 정의보기를 렌더링 할 시점과 시점을 결정하려고합니다. 렌더링을 사용하면 전체 컨텍스트 (뷰, 컨트롤러)를 렌더링한다는 것을 알고 있습니다. 그러나 전망은 어떻습니까? 보기는 사용자 정의보기 및 이벤트 전달 용입니다.언제 렌더링을 통해 렌더링 할 것인가?

예는 아래 형태 엠 데이터 예를 제공

contacts.hbs

<div class="span3"> 
    <div class="well sidebar-nav"> 
    <ul class="nav nav-list"> 
     <li class="nav-header">All contacts</li> 
     {{#each contact in controller}} 
     {{view App.ContactInListView contentBinding="contact"}} 
     {{/each}} 
    </ul> 
    </div> 
</div> 
<div class="span9"> 
    {{outlet}} 
</div> 

contact_in_list_view.hbs

App.ContactInListView = Em.View.extend({ 
    templateName: 'contact_in_list', 
    tagName: 'li', 
    classNameBindings: 'isActive:active', 

    isActive: function() { 
    return this.get('content.id') === this.get('controller.activeContactId'); 
    }.property('controller.activeContactId') 
}); 

contact_in_list.hbs

렌더로 contact_in_list을 렌더링하고 컨트롤러에 전달할 수 없습니까? 렌더는 언제 사용해야합니까? 엄지 손가락의 규칙은 무엇입니까?

+0

추가 질문 : 위의 예에서는 콘텐츠 바인딩을 사용합니다. 컨트롤러와 뷰 모두에 바인딩 할 수있는 컨텐츠가 있다는 것을 의미합니까? – wryrych

+1

'render '로 할 수 있다고 생각하지 않습니다. http://stackoverflow.com/questions/14971056/nested-views-in-ember/14971239#14971239를 확인하십시오. –

답변

2

그냥 contact_in_list를 렌더링으로 렌더링하고 컨트롤러에 전달할 수 없습니까?

{{render}} 도우미는 컨트롤러가 아닌 모델을 전달할 수 있습니다. 아마 당신이이 경우에 원하는는 {{each}} 도우미의 itemController 재산

{{#each contact in controller itemController="contactInList"}} 
    {{view App.ContactInListView}} 
{{/each}} 

API docs for Ember Handlebars.helpers

내가 렌더링 사용해야 때보기에서 보면 적이있다? 엄지 손가락의 규칙은 무엇입니까?

같은 이름의 컨트롤러의 싱글 톤 인스턴스를 사용하여 현재 컨텍스트에서보기/템플릿을 렌더링하려는 경우 {{render}} 도우미를 사용하십시오.

다른 컨트롤러로 변경하지 않고 현재 컨텍스트에서보기를 렌더링하려는 경우 {{view}} 도우미를 사용하십시오. 마찬가지로 {{view Ember.TextField}}

관련 문제