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 ハンドルバーのドキュメントには、いくつかのヘルパー名が予約されていることが記載されています。それらの 1 つではないようですincludeが、キーワードのように聞こえる名前の使用には注意が必要です。

于 2014-01-30T23:40:58.703 に答える