在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
。
我想要的原因是
"123"
看起来比abc="123"
更清晰,我尝试将数组作为参数{{testHelper ["123", "987"]}}
传递,但这会产生语法错误。
答案 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'