所以我要说我正在存储< div> {{name}}< / div>和< div> {{age}}< / div>在我的数据库中.
然后我想获取第一个 HTML字符串并在模板中呈现它 – {{> template1}}只是在其中呈现带有{{name}}手柄的第一个字符串.然后我想给出新生成的模板/ html数据,这样它就可以用数据库中的实际名称填充把手,这样我们就可以获得< div> John< / div>.我试过了
然后我想获取第一个 HTML字符串并在模板中呈现它 – {{> template1}}只是在其中呈现带有{{name}}手柄的第一个字符串.然后我想给出新生成的模板/ html数据,这样它就可以用数据库中的实际名称填充把手,这样我们就可以获得< div> John< / div>.我试过了
- <template name="firstTemplate">
- {{#with dataGetter}}
- {{> template1}}
- {{/with}}
- </template>
其中template1定义为
- <template name="template1">
- {{{templateInfo}}}
- </template>
而templateInfo是一个帮助器,它从数据库中返回带有把手的上述html字符串.
dataGetter就是这个(只是一个例子,我正在使用不同命名的集合)
- Template.firstTemplate.dataGetter = function() {
- return Users.findOne({_id: Session.get("userID")});
- }
我无法填充{{name}}.我尝试了几种不同的方法,但似乎Meteor不明白字符串中的把手需要用数据进行评估.我在0.7.0所以没有Blaze,由于我正在使用的其他软件包,我暂时无法升级,他们还没有支持0.8版本.关于如何使其工作的任何想法都非常感谢.
解决方法
如果你需要动态编译复杂的模板,我会建议凯利的回答.
否则,您有两种选择:
>创建每个模板变体,然后动态选择正确的模板:
例如,创建模板
- <template name="displayName">{{name}}</template>
- <template name="displayAge">{{age}}</template>
然后动态地包含它们
- {{> Template.dynamic template=templateName}}
其中templateName是一个返回“age”或“name”的帮助器
>如果您的模板很简单,只需自己执行替换.您可以使用Spacebars.SafeString返回HTML.
- function simpleTemplate(template,values){
- return template.replace(/{{\w+}}/g,function(sub) {
- var p = sub.substr(2,sub.length-4);
- if(values[p] != null) { return _.escape(values[p]); }
- else { return ""; }
- })
- }
- Template.template1.helpers({
- templateInfo: function(){
- // In this context this/self refers to the "user" data
- var templateText = getTemplateString();
- return Spacebars.SafeString(
- simpleTemplate(templateText,this)
- );
- }