所以我要说我正在存储< 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) ); }