1

我试图弄清楚何时使用渲染以及何时通过视图渲染自定义视图。我知道使用 render 进行渲染可以获得完整的上下文(视图、控制器)。但是视图呢?View 应该用于自定义视图和处理事件。

下面的示例来自ember 数据示例

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

4

1 回答 1

2

我不能只用 render 渲染 contact_in_list 并传递给它一些控制器吗?

帮助器{{render}}可以传递模型,但不能传递控制器。在这种情况下,您可能想要的是{{each}}助手的itemController属性

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

查看Ember Handlebars.helpers 的 API 文档

我应该什么时候使用渲染和什么时候查看?经验法则是什么?

{{render}}当您想使用同名控制器的单例实例在当前上下文中呈现视图/模板时,请使用帮助程序。

{{view}}当您想在当前上下文中呈现视图而不更改到另一个控制器时,请使用帮助程序。喜欢{{view Ember.TextField}}

于 2013-04-11T13:19:14.650 回答