【问题标题】:Global Handlebars template returns a gibberish HTML in meteorGlobal Handlebars 模板在流星中返回乱码 HTML
【发布时间】:2014-02-23 10:57:24
【问题描述】:

我试图使用流星的车把助手来包含一个模板。就像,我的index.html 看起来像

<body>
  {{> body}}
</body>

<template name="body">
  {{include "myTemplate" attr=value}}
</template>

为此,我创建了一个车把助手,如下所示

Handlebars.registerHelper('include', function(templateName, options) {
  return Template[templateName]({name: 'stackoverflow'});
});

myTemplate.html 看起来像

<template name="myTemplate">
  Hello {{name}}
</template>

我在任何地方都没有{{&gt; myTemplate}}。我的计划是动态注入/渲染它。

所以当我运行项目时,{{include ...}} 被替换为一些像下面这样的乱码 html。

<$label:RjH4gQSmtStAKKaBv><$data:yBKwgoiiHFTKfMec2>
<$landmark:uRZQ3PShZEQwKngFG><$events:WW5fKkc6G5FYKzNrb>
<$watch:GQg4oHk9CyhMw97v4><$isolate:5gXzmhnr9ZCWtWjTB>Hello stackoverflow</$isolate:5gXzmhnr9ZCWtWjTB>
</$watch:GQg4oHk9CyhMw97v4></$events:WW5fKkc6G5FYKzNrb>
</$landmark:uRZQ3PShZEQwKngFG></$data:yBKwgoiiHFTKfMec2>
</$label:RjH4gQSmtStAKKaBv>

看起来与火花有关。当我在开发控制台中运行Template.myTemplate({name: 'stackoverflow'}) 时,我得到了正确的字符串'Hello stackoverflow'。我很困惑为什么在帮助器中使用时会给出这些乱码数据?

【问题讨论】:

  • 首先,您应该避免使用名为body 的模板。在新的模板引擎(您现在可以与meteor --release template-engine-preview-10.1 一起使用)中,主体是UI.body 访问的自己的特殊模板。其次,你为什么要制作一个包含模板的助手?这就是{{&gt; templateName}} 已经在做的事情。我觉得通过iron-router 路由会更好地完成您尝试做的任何事情。

标签: javascript meteor handlebars.js meteor-helper


【解决方案1】:

如果您要使用助手渲染模板,您需要告诉 Meteor 不要转义字符串。如果它被转义,Spark 将不会渲染它。这是一个有用的默认功能,可以防止将任意代码注入您的网站,并且通常可以清楚地显示正在呈现的内容。

为此,您可以将其写在模板中的三方括号中

<template name="body">
  {{{include "myTemplate" attr=value}}}
</template>

或在帮助程序中返回SafeString

Handlebars.registerHelper('include', function(templateName, options) {
  return new Handlebars.SafeString(Template[templateName]({name: 'stackoverflow'}));
});    

在相关说明中,Meteor handlebars documentation 指出保留了一些帮助程序名称。 include 似乎不是其中之一,但您应该小心使用听起来像关键字的名称。

【讨论】:

  • 谢谢@andrew。 ..您解决方案的第一部分(即使用{{{ }}})有效......但不知何故无法让第二部分工作。 Handlebars.SafeString() 返回 null。我的项目可能有问题。会深入研究。
  • @Goje87 你确定你使用的是new Handlebars.SafeString 而不是Handlebars.SafeString
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多