如何在流星的车把助手中使用多个参数?
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>
【讨论】:
以上是关于如何在流星的车把助手中使用多个参数?的主要内容,如果未能解决你的问题,请参考以下文章