如何从Meteor模板向Spacebars助手传递多个参数?

8
我还没有找到一个可靠的例子。
Template.registerHelper("itemLookup", function(sku, property){
  return Items.findOne({sku: sku})[property];
});

我该如何在模板上调用它?

我想做这样的事情:

{{ itemLookup sku="i3_4030U" property="title" }}

它应该输出:
"Intel Core i3 4030U"
1个回答

24
不要给模板帮助程序命名参数,它们将按照相同的顺序传递到您的帮助程序函数中。

不要给模板助手命名参数,它们将按照相同顺序传递给您的助手函数:

{{ itemLookup "i3_4030U" "title" }}

编辑:

那为什么我在网上看到有人命名模板帮助器参数呢?

当你包含另一个模板并且想将其当前数据上下文设置为其他内容时,可以给参数命名:

{{> childTemplate param1="A" param2="B"}}

在子模板的标记中,您可以引用 {{param1}}{{param2}}

在 Spacebars 中可用的另一个 Handlebars 助手功能是“哈希”可选参数值,您可以将其作为最后一个参数传递给您的助手参数,并像这样使用它:

HTML

{{helper "A" "B" namedParam1="C" namedParam2="D"}}

JS

Template.registerHelper("helper", function(param1, param2, options){
  console.log("param1 :", param1);
  console.log("param2 :", param2);
  if(options && options.hash){
    console.log("namedParam1 :", options.hash.namedParam1);
    console.log("namedParam2 :", options.hash.namedParam2);
  }
});

1
谢谢!这个简洁的总结正是我所需要的! - fuzzybabybunny
好的,还有一个问题(我想)。在某些帮助程序中,不需要使用“ ”。{{> afQuickField name="optionsButNoSelect" options=numSelectOptions noselect="true"}} 我非常确定numSelectOptions没有加引号是因为它是返回对象的帮助程序名称,对吗? - fuzzybabybunny
@saimeunt,您能在同一模板调用中混合使用命名参数和未命名参数吗? - Aaron
1
@fuzzybabybunny:不要混淆模板包含语法{{> childTemplate}}和助手语法{{helper}},因为它们不是同一件事。你的想法是正确的,认为你不需要引用解析为模板助手的参数值。 - saimeunt
1
@Aaron:在辅助函数调用中,您可以混合使用命名和未命名参数(请参见我的示例),但是当包含它时,您必须为传递给子模板的每个参数命名。请注意,使用此功能将完全放弃先前的数据上下文,并用您提供的参数替换它。 - saimeunt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接