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

Posted

技术标签:

【中文标题】如何在流星的车把助手中使用多个参数?【英文标题】:How to use multiple parameters in a handlebar helper with meteor? 【发布时间】:2012-09-15 13:20:16 【问题描述】:

我正在尝试使用 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) 它返回 'undefined')。

流星版本 0.4.0 (8f4045c1b9)

【问题讨论】:

【参考方案1】:

你的逻辑很好,只是对模板进行一些更改

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

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

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

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

玩得开心

【讨论】:

如果您需要 #if 内容 /if 样式帮助器,则此方法无效。 在这种情况下可以组合助手:#if testHelper "v1" "v2" some Template /if Handlebars.registerHelper 应该放在哪里? @KarlMorrison – 你可以把它放在运行客户端代码的任何地方,例如我通常把它放在myApp/client/lib/helpers/template-helpers.js 另外,对于较新版本的 Meteor,你希望使用单独注册每个单独的助手此语法:Template.registerHelper('myHelperName', function(arg1, arg2) [...] );。您不需要将此代码包装在任何内容中,只需将其作为单独的代码 sn-ps 放入您的 template-helper.js 中,每个 sn-ps 之间有大量空格以提高可读性。 ;)【参考方案2】:

补充

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

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

<template name="myTemplate">
   testHelper1 (testHelper2 "value2") 
</template>

【讨论】:

以上是关于如何在流星的车把助手中使用多个参数?的主要内容,如果未能解决你的问题,请参考以下文章

将模板中写入的数组传递给流星/车把助手

如何在 Meteor 中使用 #each 块实现最后一项的条件?

如何将主干视图连接到流星车把模板?

如何使用 express 安装车把助手

无法在流星中使用车把@first 数据属性

如何在车把 ember 中定义自定义助手