templates - 如何使用 meteor 空格键模板动态呈现HTML?

标签 templates meteor meteor-blaze spacebars meteor-helper

假设我要在数据库中存储<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/

    相关文章:

    c++ - 为什么有时使用基本类型作为基类编译?

    c++ - 如何将文件句柄传递给输出流的函数

    javascript - 如何将下拉值传递给模板助手。 [ meteor +火焰]

    javascript - Meteor 中新 Web 应用程序的用户访问管理

    Meteor如何在mongo中保存模板

    c++ - 仅当语句匹配时如何将参数发送给函数?

    c++ - 我应该更喜欢通过嵌套的 typedef 还是继承来调用模板元函数?

    meteor - 在 Meteor 1.3+ 中使用包含相同 npm 包的多个包

    javascript - 如何在空格键中使用动态对象属性名称?

    javascript - 我如何模拟缓慢的 Meteor 发布?