什么时候通过渲染和通过视图渲染?

时间:2013-04-10 17:27:00

标签: ember.js

我正在试图找出何时使用渲染和通过视图渲染自定义视图。我知道使用渲染渲染我们得到完整的上下文(视图,控制器)。但是观点怎么样? View应该用于自定义视图和处理事件。

以下示例来自余烬数据示例

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并传递一些控制器吗? 什么时候应该使用渲染和何时查看?什么是经验法则?

1 个答案:

答案 0 :(得分: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}}

一样