0

我试图使用流星的车把助手来包含一个模板。像,我的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>

我没有{{> 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'})在开发控制台中运行时,我得到了正确的 string 'Hello stackoverflow'。我很困惑为什么在助手中使用时会给出这些乱码数据?

4

1 回答 1

1

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

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

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

SafeString或在助手中返回 a

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

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

于 2014-01-30T23:40:58.703 回答