相同的模板,查看来自不同控制器的数据 - 查看,控制 - 使用哪一个?

时间:2013-05-25 20:51:13

标签: ember.js

假设我想展示TOP3用户:一种名声和耻辱的名人堂。数据来自两种不同的资源。视图和模板是相同的。

我想知道我应该使用哪个块助手。视图?控制,或者可能用渲染做一些魔法(一个实例,我知道,我知道)以及我如何自定义视图,为它提供一些数据。

以下解决方案如下:

<div id="top3" class="row">
  {{view App.Top3View controllerBinding="controllers.top" label="Hall of Fame" blankState="Wanna be here? Be
  nice to other people!"}}

  {{view App.Top3View controllerBinding="controllers.loser" label="Hall of Shame" blankState="No one here!"}}
</div>

如您所见,我想提供一些数据来定制它。

// top3.handlebars
<h2>{{view.label}}</h2>
{{#if controller.content}}
<ul>
  {{#each user in controller.content}}
  <li>
    <img {{bindAttr src="user.gravatar" title="user.name"}} />
  </li>
  {{/each}}
</ul>
{{else}}
<p>{{view.blankState}}</p>
{{/if}}

App.Top3View = Em.View.extend
  classNames: ['col-span-6']
  templateName: 'top3'

我想知道标签应该来自哪里?也许它应该属于一个控制器?我想知道这是不是应该用Ember写的方式?

请分享您的想法。

1 个答案:

答案 0 :(得分:1)

  

我想知道我应该使用哪个块助手。视图?控制,或者用渲染做一些魔术

不确定这里有正确或错误的答案。一般来说,我会选择最简单的解决方案,因此查看助手是正确的起点。就像内置的余烬视图(Ember.TextField等)一样,你的TOP3视图非常简单。由于它不需要维护自己的状态或包含任何业务逻辑,因此不需要它拥有自己的控制器。

  

以及如何自定义视图,为其提供一些数据。我想知道标签应该来自哪里?也许它应该属于一个控制器?

要么是好的,只取决于你期望它们来自哪里。对于您希望在模板中定义的内容,使用视图属性是一个可靠的选择。因此,包含视图的任何人都可以像在示例中那样对值进行硬编码,或者将它们绑定到类似labelBinding=controllers.top.label的内容。如果这些属性总是将在控制器中可用,那么在top3.handlebars中仅用{{view.label}}替换{{label}}可能是有意义的。这就是说我认为你的视图属性解决方案是最优雅的。

  

我想知道这是不是应该用Ember写的方式?

是的,我认为你做得对。