2013-04-10 99 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

{{#linkTo "contact" contact}}{{contact.fullName}}{{/linkTo}} 

不能只是渲染contact_in_list渲染並傳遞給它一些控制器嗎? 什麼時候應該使用渲染和何時查看?經驗法則是什麼?

+0

附加問題:上面的例子使用內容綁定。這是否意味着控制器和視圖都有我們可以綁定的內容? – wryrych 2013-04-10 17:29:08

+1

我不認爲你可以用'render'來做。看看http://stackoverflow.com/questions/14971056/nested-views-in-ember/14971239#14971239 – 2013-04-10 19:29:33

回答

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}}