假设我要在数据库中存储<div>{{name}}</div>
和<div>{{age}}</div>
。
然后,我想获取第一个HTML字符串并将其呈现在模板中-{{> template1}}
,它仅使用{{name}}
Handlebars 来呈现第一个字符串。然后,我想提供新生成的template/html数据,以便它可以使用数据库中的实际name
填充 Handlebars ,以便我们获得<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并不理解字符串中的 Handlebars 需要与数据一起评估。我使用的是0.7.0,所以没有Blaze,由于我使用的是其他软件包,我目前无法升级,他们到目前为止还没有0.8+版本支持。非常感谢我关于如何使它起作用的任何想法。
最佳答案
如果您需要动态编译复杂的模板,我建议使用Kelly的答案。
否则,您有两个选择:
例如,创建模板
<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)
);
}
关于templates - 如何使用 meteor 空格键模板动态呈现HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415182/