Meteor - 如何在不使用键值对的情况下将任意数量的参数传递给Helper?

时间:2015-01-03 16:45:06

标签: meteor spacebars

在Meteor中,我们可以将值传递给助手,如下所示:

{{testHelper abc="123" xyz="987"}}

和帮手:

Template.registerHelper('testHelper', function(opt) {
    console.log(opt.hash.abc);
    console.log(opt.hash.xyz);
});

<小时/> 有没有办法做到:

{{testHelper "123" "987"}}

并将值作为索引返回?像这样:

Template.registerHelper('testHelper', function(opt) {
    console.log(opt.hash[0]);
    console.log(opt.hash[1]);
});

我知道你可以定义一个带有两个参数的函数,比如this answer,它可以工作。但我理想的是希望函数能够获取任意数量的参数。

如果我console.log(opt);在这里,我会得到123,而我希望opt.hash[0](或更好,opt[0])为123 },opt.hash[1]987

我想要的原因是

    当关键值无关紧要时,
  1. "123"看起来比abc="123"更清晰,
  2. 但仍然允许助手接受任意数量的 参数。
  3. 我尝试将数组作为参数{{testHelper ["123", "987"]}}传递,但这会产生语法错误。

2 个答案:

答案 0 :(得分:3)

这是一个较旧的问题,但我刚刚测试了类似的东西:

// JS
Template.registerHelper('concat', function () {
    return Array.prototype.slice.call(arguments, 0, -1).join('');
});

// Template
{{ concat "a" "b" "c" }}

基本上,正常的JavaScript arguments值仍可在帮助程序中使用。

最后一个参数始终是Spacebars对象(带有哈希的对象),但是如果你像我一样切断它(Array.prototype.slice.call(arguments, 0, -1)),你基本上得到一个数组中的所有其他参数,你就是然后可以随意使用。

答案 1 :(得分:1)

所以这可能不是一个完美的解决方案,但是如果已经存在一个帮助器,你可以传入一个数组,所以假设你有办法将值注入到辅助数组中,例如使用Session,你可以访问它用你原来的方法。

Session.set('tempArray', ['abc', 'xyz']);

Template.registerHelper('tempArray', function() {
  return Session.get('tempArray');
});

Template.registerHelper('readArray', function(arr) {
  console.log(arr[0]);
});

<!-- template -->
{{readArray tempArray}}

//outputs: 'abc'