2

假设我想显示 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编写?

请分享你的想法。

4

1 回答 1

1

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

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

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

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

我想知道这是否应该用Ember编写?

是的,我认为你做对了。

于 2013-05-25T21:56:57.357 回答