如何在带有流星的车把助手中使用多个参数?

Gre*_*reg 51 javascript handlebars.js meteor meteor-helper

我正在尝试使用Meteor创建自定义帮助程序.关于这里的文档:https: //github.com/meteor/meteor/wiki/Handlebars

我试图按如下方式定义我的助手:

Template.myTemplate.testHelper = function(foo, bar, options) {
    console.log(foo);
    console.log(bar);
}
Run Code Online (Sandbox Code Playgroud)

我的模板看起来像:

<template name="myTemplate">
    {{#testHelper "value1" "value2"}}
    {{/testHelper}}
</template>
Run Code Online (Sandbox Code Playgroud)

看看我的控制台输出,我希望看到2行输出:

value1
value2
Run Code Online (Sandbox Code Playgroud)

但是我的控制台看起来像:

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));
  } 
Run Code Online (Sandbox Code Playgroud)

请注意,我对流星和车把都是全新的.我想使用下划线会更开心,但是流星的文档几乎完全瞥了一眼下划线.我在定义辅助函数时做错了吗?它似乎没有看到第二个参数"bar",而是将其解释为选项.(注意:如果我是console.log(options),则返回'undefined').

流星版本0.4.0(8f4045c1b9)

Rui*_*ves 60

您的逻辑很好,只需对模板进行一些更改即可

<template name="myTemplate">
  {{testHelper "value1" "value2"}}
</template>
Run Code Online (Sandbox Code Playgroud)

请记住,testHelper函数仅在myTemplate模板中定义.

如果你想在全球注册testHelper,你需要做这样的事情

Handlebars.registerHelper('testHelper', function(foo, bar){
  console.log(foo);
  console.log(bar);
});
Run Code Online (Sandbox Code Playgroud)

玩得开心

  • 可以在这种情况下组合助手:`{{#if testHelper"v1""v2"}}一些模板{{/ if}}` (8认同)
  • 如果您需要{{#if}}内容{{/ if}}样式帮助器,则此选项无效. (2认同)