printArray
配列内のすべてのアイテムを出力するだけのヘルパーがあります。JS で配列を定義し、コンテキスト オブジェクトを介してヘルパーに渡すと、うまく機能します。私がやりたいのは、次のように、テンプレートで配列を定義することです。
{{printArray arr=[1, 3, 4] }}
残念ながら、これが私のヘルパーに届く頃には、arr
キーポイントはundefined
. JavaScriptで定義せずにヘルパー内で配列を取得する有効な構文はありますか?
printArray
配列内のすべてのアイテムを出力するだけのヘルパーがあります。JS で配列を定義し、コンテキスト オブジェクトを介してヘルパーに渡すと、うまく機能します。私がやりたいのは、次のように、テンプレートで配列を定義することです。
{{printArray arr=[1, 3, 4] }}
残念ながら、これが私のヘルパーに届く頃には、arr
キーポイントはundefined
. JavaScriptで定義せずにヘルパー内で配列を取得する有効な構文はありますか?
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 つの注意点は、配列を文字列として渡す必要があることです。
配列を返す別のヘルパーを使用する必要があります
Template.ArrayDemo.helpers({
arrayValues: [1, 2, 3],
printArray: function(arr) {
for (i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
});
今、あなたはできる
{{printArray arr=arrayValues}}
配列の括弧で囲まれた値だけを渡してみましたか?
{{printArray [1, 3, 4]}}
handlebars ヘルパー メソッドへの引数として、オブジェクトを簡単に渡すことができることはわかっています。
{{printArray {arr: [1, 3, 4]} }}
これらの素晴らしいヘルパー メソッドを見てみましょう。そのほとんどは他の場所から盗んだもので、いくつかは私が作成または調整したものです...これらは、このトピックに関する私の参照出発点です。
https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js