2017-02-08 5 views
3

私は、このような{{_engine.x.y}}として何か他のもののためにそれを変更するまで、「静かに」何を示しませんでした{{engine.x.y}}という名前のテンプレートのVAR、と苦労の後、私はother words such as {{action}} seemed to be "reserved", with no "escaping" possibility ...Handlebars予約語の公式リストはありますか?

は、「予約語」のいずれかのリストがあることを見ましたが"驚きの要因"を軽減するために?私は何も見つけることができませんでした。

EDIT

  • さらに奇妙な、私は直接{{engine}}(ないengine.x.y)を使用する場合、それは常に私のコンテキスト(ノードV4.6 +にただし、文字列".hbs"

  • によって置き換えられます電子メールテンプレート+ハンドルバー){{action}}が正しく動作します(linked problem aboveはEmber.js専用です)

+3

私は[handlebars.jsソースコード](https://github.com/wycats/handlebars.js/search?utf8=%E2%9C%93&q=engine)/ [mustache.jsソースコード]を検索しました。 (https://github.com/janl/mustache.js/search?utf8=%E2%9C%93&q=engine)、奇妙なことに私は奇妙な言葉「エンジン」のインスタンスを見つけることすらできませんでした。私は予約語のインスタンスも検索し、handlebars.jsのソースコードに結果がありますが、JSの[グローバルに予約された変数](https://github.com/wycats/handlebars)を参照しているようです.js/search?utf8 =%E2%9C%93&q =予約済み)。 –

+0

Emberを使用していますか?私は、 '予約された'値が、ハンドルバー自体ではなく、ハンドルバーの範囲を設定しているものから来ていると推測する危険があります。 –

+0

@JoeClayあなたが正しいです、私はemberを使用せず、私の場合(Node.js v4.6)の '{{action}} 'を使って完全に動作します。おもしろい... –

答えて

2

見つけました - 問題はHandlebars(上記のコメントにはJosh Crozierが名前を予約していないことが判明しています)ではなく、使用しているemail-templatesライブラリにあります。 render関数は、テンプレートのコンテキストとして渡されるオブジェクトのいくつかのプロパティを設定します。つまり、オブジェクトに同じ名前のプロパティが含まれていると、オブジェクトがclobberedになります。

email-templatesソースのコードの該当する行がhereを見つけることができますが、完全性のために、上書きされますプロパティは次のとおりです。

  • filename
  • engine(テンプレートのファイル名に設定します) (使用しているテンプレートエンジンのファイル拡張子に設定)
  • templatePath(テンプレートを含むディレクトリに設定)

最も明白な解決策は名前を変更することですが、それがオプションでない場合はfile an issue on their repoにする必要があります。

+1

3つの"特殊なケース "しかない...私はそこで不運になっています... ^^とにかく感謝! –

+0

@FrostyZ:問題ありません!お役に立てて嬉しいです :) –

関連する問題