配列内のすべてのアイテムを出力するprintArray
というヘルパーがあります。 JSで配列を定義し、コンテキストオブジェクトを介してヘルパーに渡すとうまく機能します。私がやりたいのは、次のように、テンプレート内で配列を定義することです。
{{printArray arr=[1, 3, 4] }}
残念ながら、これが私のヘルパーに届くまでに、arr
キーはundefined
を指しています。 javascriptで定義せずにヘルパー内に配列を取得するための有効な構文はありますか?
配列を返す別のヘルパーを使用する必要があります
Template.ArrayDemo.helpers({
arrayValues: [1, 2, 3],
printArray: function(arr) {
for (i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
});
今、あなたはすることができます
{{printArray arr=arrayValues}}
JavaScriptのarguments
配列を使用して、このようなことを実現できます。 arguments
配列を使用すると、関数が呼び出されたときに関数に渡されるすべての値にアクセスできます。
これにより、次のような構文を使用できるようになります。
{{printArray 1 3 4}}
コードは次のようになります。
Handlebars.registerHelper('printArray', function() {
//Last argument is the options object.
var options = arguments[arguments.length - 1];
//Skip the last argument.
for(var i = 0; i < arguments.length - 1; ++i) {
//Do your thing with each array element.
}
//Return your results...
return '';
});
eval()
を使用すると、次のようなヘルパーを使用して、これをほぼ達成できます。
Handlebars.registerHelper('printArray', function(values) {
var array = eval(values);
if (array.constructor === Array()) {
...
}
}
上記では、テンプレートからこれを呼び出すことができます。
{{printArray '[0, 1, 2]'}}
このメソッドの1つの注意点は、配列を文字列として渡す必要があることです。
配列の括弧で囲まれた値だけを渡してみましたか?
{{printArray [1, 3, 4]}}
ハンドルバーヘルパーメソッドへの引数として、オブジェクトを簡単に渡すことができることを私は知っています。
{{printArray {arr: [1, 3, 4]} }}
これらの素晴らしいヘルパーメソッドを見てください。そのほとんどは他の場所から盗みましたが、そのうちのいくつかは私が書いたり微調整したりしました...これらはこのトピックに関する私の参照の出発点です。
https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js
配列ヘルパーは次のように定義できます。
Handlebars.registerHelper('array', function() {
return Array.prototype.slice.call(arguments, 0, -1);
}
{{printArray (array 1 3 4)}}