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));
  } 

请注意,我对流星和车把完全陌生。我想我会更高兴使用下划线,但流星的文档几乎完全忽略了下划线。我在定义我的辅助函数时做错了什么?似乎它没有看到第二个参数“bar”,而是将其解释为选项。(注意:如果我 console.log(options) 它返回“未定义”)。

流星版本 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 回答
4

除了

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

而不是将值作为参数传递,而是将函数作为参数传递这是代码

<template name="myTemplate">
  {{ testHelper1 (testHelper2 "value2") }}
</template>
于 2017-08-31T07:46:16.847 回答