如何使用Meteor Spacebars模板动态呈现HTML?

前端之家收集整理的这篇文章主要介绍了如何使用Meteor Spacebars模板动态呈现HTML?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我要说我正在存储< div> {{name}}< / div>和< div> {{age}}< / 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版本.关于如何使其工作的任何想法都非常感谢.

@R_404_323@

如果你需要动态编译复杂的模板,我会建议凯利的回答.

否则,您有两种选择:

>创建每个模板变体,然后动态选择正确的模板:

例如,创建模板

<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)
      );
  }

猜你在找的HTML相关文章