我试图使用meteor的把手助手来包含模板。就像,我的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'})
时,我得到正确的字符串'Hello stackoverflow'
。我很困惑为什么在帮助器中使用时会给出这些乱码数据?
答案 0 :(得分: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
似乎不是其中之一,但您应该小心使用听起来像关键字的名称。