【发布时间】:2012-04-17 10:47:14
【问题描述】:
我想将不同的对象存储在同一个控制器内容数组中,并使用适当的视图模板渲染每个对象,但最好是相同的视图。
我正在使用下面的代码输出列表对象。它们目前是相同的,但我希望能够使用不同的。
<script type="text/x-handlebars">
{{#each App.simpleRowController}}
{{view App.SimpleRowView class="simple-row" contentBinding="this"}}
{{/each}}
</script>
视图的简化版本如下。我没有包含的其他功能可以用于任何对象,无论模型如何。所以我最好有一个观点(尽管我已经阅读了一些关于 mixin 的文章,如果没有的话可能会有所帮助)。
<script>
App.SimpleRowView = Em.View.extend({
templateName: 'simple-row-preview',
});
</script>
我最初的几次允许不同对象类型的测试以“simple-row-preview”中的大量条件结束 - 看起来很糟糕!
是否有任何方法可以动态控制迭代内容数组时使用的模板名称或视图?
更新
非常感谢两位受访者。视图中使用的最终代码如下。我的一些模型是相似的,我喜欢能够在我的应用程序中切换模板(或某种“状态”)的想法。
<script>
App.SimpleRowView = Em.View.extend({
templateName: function() {
return Em.getPath(this, 'content.template');
}.property('content.template').cacheable(),
_templateChanged: function() {
this.rerender();
}.observes('templateName'),
// etc.
});
</script>
【问题讨论】:
标签: javascript ember.js