我在Meteor中有三个简单的模板和一个集合(Collection), 集合中包含它们任意组合的名称。我想根据集合中的名称动态地渲染这些模板。
目前,我的解决方法是让客户端订阅该集合,并通过模板函数访问名称。但是,如果我尝试对名称运行“>”,Meteor会尝试呈现变量名称,而不是指向其值的模板。
因此,输出仅是页面上的它们的名称: "template1 template2 template3",而不是呈现template1,template2和template3的HTML。
以下是我一直在使用的代码,希望能找到一种解决问题的方法,而无需手动运行Meteor.render。
服务器js:
目前,我的解决方法是让客户端订阅该集合,并通过模板函数访问名称。但是,如果我尝试对名称运行“>”,Meteor会尝试呈现变量名称,而不是指向其值的模板。
因此,输出仅是页面上的它们的名称: "template1 template2 template3",而不是呈现template1,template2和template3的HTML。
以下是我一直在使用的代码,希望能找到一种解决问题的方法,而无需手动运行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>
Template[name]()
函数,他一遍又一遍地重新生成模板。这种方法很好,但是在替换时没有正确地删除模板。我测试过了,当你插入和删除几千个条目后,会有50MB的内存堆积! - Fabian Vogelsteller