57

Meteor を使用してカスタム ヘルパーを作成しようとしています。こちらのドキュメントに従ってください: https://github.com/meteor/meteor/wiki/Handlebars

次のようにヘルパーを定義しようとしました。

Template.myTemplate.testHelper = function(foo, bar, options) {
    console.log(foo);
    console.log(bar);
}

私のテンプレートは次のようになります。

<template name="myTemplate">
    {{#testHelper "value1" "value2"}}
    {{/testHelper}}
</template>

コンソール出力を見ると、次の 2 行の出力が表示されるはずでした。

value1
value2

ただし、コンソールは次のようになります。

value1
function (data) {
    // don't create spurious annotations when data is same
    // as before (or when transitioning between e.g. `window` and
    // `undefined`)
    if ((data || Handlebars._defaultThis) ===
        (old_data || Handlebars._defaultThis))
      return fn(data);
    else
      return Spark.setDataContext(data, fn(data));
  } 

注意してください、私は流星とハンドルバーに完全に慣れていません。アンダースコアを使用した方がずっと幸せだと思いますが、流星のドキュメントはほぼ完全にアンダースコアを一瞥しています。ヘルパー関数の定義に何か問題がありますか? 2 番目のパラメーター「bar」が表示されず、代わりにオプションとして解釈されているようです。(注: console.log(options) を実行すると、「未定義」が返されます)。

Meteor バージョン 0.4.0 (8f4045c1b9)

4

2 に答える 2

66

あなたのロジックは良いです。テンプレートにいくつかの変更を加えるだけです

<template name="myTemplate">
  {{testHelper "value1" "value2"}}
</template>

testHelper 関数は myTemplate テンプレートでのみ定義されていることに注意してください。

testHelper をグローバルに登録したい場合は、次のようにする必要があります

Handlebars.registerHelper('testHelper', function(foo, bar){
  console.log(foo);
  console.log(bar);
});

楽しむ

于 2012-09-24T14:48:09.417 に答える