如何从模板名称集合渲染流星模板?

我在流星中有三个简单的模板,在服务器上有一个集合,它们的名字组合。 我希望能够根据它们的名称在Collection中动态呈现这些模板。

目前我正在尝试通过使用客户端订阅集合来完成此操作,并通过模板函数访问这些名称。 不幸的是,如果我尝试在名称上运行“>”,Meteor将尝试渲染变量名称而不是其值的模板名称。

因此,而不是在template1,template2和template3中呈现html,输出仅仅是它们在页面上的名称:“template1 template2 template3”。

这里是我一直在使用的代码,我希望有一种方法可以解决我的问题,而无需手动运行Meteor.render。

服务器js:

TemplatesToRender = new Meteor.Collection("templatesToRender");

TemplatesToRender.insert({templateName: "template3"});
TemplatesToRender.insert({templateName: "template2"});

客户端html:

<body>
    {{#each templatesToRender}}
        {{> templateName}}           // meteor trying to render a template
                                     // called "templateName" instead of the 
                                     // variable inside templateName.
    {{/each}}
</body>

<template name="template1">
    <span>Template 1</span>
</template>

<template name="template2">
    <span>Template 2</span>
</template>

<template name="template3">
    <span>Template 3</span>
</template>

你可以制作一个render助手:

 Handlebars.registerHelper('render', function(name, options) {
   if (Template[name])
     return new Handlebars.SafeString(Template[name]());
 });

和它一起使用

{{render templateName}}

你可能想试试这个

在你的HTML

<body>

    {{> templateToRender}}

</body>

<template name="templateToRender">

    {{! use below to detect which template to render}}

    {{#if templateName "template1"}}
        {{> template1}}
    {{/if}}

    {{#if templateName "template2"}}
        {{> template3}}
    {{/if}}

    {{#if templateName "template3"}}
        {{> template3}}
    {{/if}}

</template

<template name="template1">

    <p>this is template1</p>

</template>

<template name="template2">

    <p>this is template2</p>

</template>

<template name="template3">

    <p>this is template3</p>

</template>

在你的脚本中

Template.templateToRender.templateName = (which) ->
    # if user have a field like templateName you can do things like
    tmplName = Meteor.user().templateName
    # Session.equals will cause a template render if condition is true.
    Session.equals which, tmplName

我不能评论(声望不够高:()......但......

在搜索了相当长的一段时间后,我找到了这个答案,以回答以下问题:

“如何动态或以编程方式选择要在流星中呈现的句柄模板”。

基本上,我想要一个Thing类型的集合,比如说“a”,“b”和“c”,并且在迭代这些事情的集合时,我想选择一个特定于类型的模板来为每个其中...模板被命名为“aThingItem”,“bThingItem”和“cThingItem”。

我的解决方案基于Tom Coleman的上面给出的答案,我只需稍微调整它就可以适应我的情况。 谢谢汤姆的回答!

我把这个“答案”放在这里只是希望帮助其他人试图寻找与我的问题类似的问题的答案。

链接地址: http://www.djcxy.com/p/66479.html

上一篇: How to render a Meteor Template from Collection of Template names?

下一篇: Keeping SQLite data after update