如何使用 Meteor Spacebars 模板动态渲染 HTML?

2024-05-09

假设我正在存储<div>{{name}}</div> and <div>{{age}}</div>在我的数据库中。 然后我想获取第一个 HTML 字符串并将其呈现在模板中 -{{> template1}}它只渲染第一个字符串{{name}}车把在里面。然后我想给出新生成的模板/html数据,以便它可以用实际的数据填充车把name从数据库中,这样我们就可以得到<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+ 版本支持。任何关于如何让它发挥作用的想法都非常感谢。


在 1.0 中,上述方法都不起作用。我让它与客户端代码中定义的以下函数一起使用。关键是将选项 { isTemplate: true} 传递给编译函数。

var compileTemplate = function(name, html_text) {
  try {
    var compiled = SpacebarsCompiler.compile(html_text, { isTemplate:true });
      var renderer = eval(compiled);
      console.log('redered:',renderer);
      //Template[name] = new Template(name,renderer);
      UI.Template.__define__(name, renderer);
  } catch (err){
    console.log('Error compiling template:' + html_text);
    console.log(err.message);
  }
};

您可以在客户端上使用类似以下内容进行调用:

compileTemplate('faceplate', '<span>Hello!!!!!!{{_id}}</span>');

这将在您的 html 中以 UI 动态呈现

{{> Template.dynamic template='faceplate'}}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Meteor Spacebars 模板动态渲染 HTML? 的相关文章

随机推荐