0

投稿のリストを調べて、コンテンツの種類 (画像、テキスト、Twitter 投稿) に応じて適切な 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'
4

1 に答える 1

1

{{> template}}構文はテンプレートを挿入するためだけのものですが、ヘルパーの場合は を使用し、{{helper}}山かっこは使用しません>。ヘルパー呼び出しからブラケットを削除し、ヘルパー内で必要なサブテンプレートをレンダリングします。

Template.postItem.getTemplateName = function() {
    return new Handlebars.safeString(Template.postImage());

};
于 2013-10-06T11:36:31.993 に答える