假设我想展示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写的方式?
请分享您的想法。
答案 0 :(得分:1)
我想知道我应该使用哪个块助手。视图?控制,或者用渲染做一些魔术
不确定这里有正确或错误的答案。一般来说,我会选择最简单的解决方案,因此查看助手是正确的起点。就像内置的余烬视图(Ember.TextField等)一样,你的TOP3视图非常简单。由于它不需要维护自己的状态或包含任何业务逻辑,因此不需要它拥有自己的控制器。
以及如何自定义视图,为其提供一些数据。我想知道标签应该来自哪里?也许它应该属于一个控制器?
要么是好的,只取决于你期望它们来自哪里。对于您希望在模板中定义的内容,使用视图属性是一个可靠的选择。因此,包含视图的任何人都可以像在示例中那样对值进行硬编码,或者将它们绑定到类似labelBinding=controllers.top.label
的内容。如果这些属性总是将在控制器中可用,那么在top3.handlebars中仅用{{view.label}}
替换{{label}}
可能是有意义的。这就是说我认为你的视图属性解决方案是最优雅的。
我想知道这是不是应该用Ember写的方式?
是的,我认为你做得对。