我正在查看帖子列表,并根据内容类型(图片,文字,推特帖子)选择正确的html句柄模板。随着越来越多的模板类型变得相当丑陋:
<template name="postItem">
{{#if isType "image"}}
{{#if isSinglePost}}
{{>postImageSingle}}
{{else}}
{{>postImage}}
{{/if}}
{{/if}}
{{#if isType "rich"}}
{{#if isSinglePost}}
{{>postRichSingle}}
{{else}}
{{>postRich}}
{{/if}}
{{/if}}
{{#if isType "video"}}
{{#if isSinglePost}}
{{>postRichSingle}}
{{else}}
{{>postRich}}
{{/if}}
{{/if}}
{{#if isType "file"}}
{{#if isMimeType "audio/wav"}}
{{>postAudio}}
{{else}}
{{>postFile}}
{{/if}}
{{/if}}
{{#if isType "link"}}
{{#if isProviderName this "Twitter"}}
{{>postTwitter}}
{{else}}
{{#if isSinglePost }}
{{>postLinkSingle}}
{{else}}
{{>postLink}}
{{/if}}
{{/if}}
{{/if}}
{{#if isType "preview"}}
{{>postPreview}}
{{/if}}
{{#if isType "photo"}}
{{>postImage}}
{{/if}}
</template>
将逻辑移动到辅助函数会更好,但我最挣扎的是如何从辅助函数返回要使用的模板名称。
{{>getTemplateName}}
Template.postItem.getTemplateName = function () {
return postImage;
};
但这当然给了我:
Exception from Deps recompute: Error: No such template 'getTemplateName'
答案 0 :(得分:1)
{{> template}}
语法仅用于插入模板,而对于帮助者,您使用{{helper}}
,而不使用尖括号>
。从帮助程序调用中删除括号,并在帮助程序中呈现所需的子模板:
Template.postItem.getTemplateName = function() {
return new Handlebars.safeString(Template.postImage());
};