Передать массив, написанный в шаблоне, в meteor / Handlebars helper
у меня есть помощник по имени printArray
это просто печатает каждый элемент в массиве. Он отлично работает, когда я определяю массив в JS и передаю его помощнику через объект контекста. То, что я хочу сделать, это определить массив прямо в шаблоне, например:
{{printArray arr=[1, 3, 4] }}
к сожалению, к тому времени, когда это доходит до моего помощника,arr
ключевые моменты undefined
. Есть ли допустимый синтаксис, чтобы получить массив внутри моего помощника, не определяя его в javascript?
5 ответов
вам нужно использовать другой помощник, который возвращает массив
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
массив для выполнения чего-то подобного. The arguments
array дает вам доступ к каждому значению, переданному функции при ее вызове.
Это позволит вам использовать синтаксис такой:
{{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]'}}
одно предостережение к этому методу заключается в том, что вы должны передать свой массив в виде строки.
вы пробовали передать только заключенное в квадратные скобки значение массива?
{{printArray [1, 3, 4]}}
Я знаю, что вы можете легко передать объекты в качестве аргументов вспомогательным методам handlebars:
{{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)}}