Пропустить массив, написанный в шаблоне, для помощника метеор/руля
У меня есть помощник printArray
, который просто печатает каждый элемент в массиве. Он отлично работает, когда я определяю массив в JS и передаю его помощнику через объект контекста. То, что я хочу сделать, это определить массив прямо в шаблоне, например:
{{printArray arr=[1, 3, 4] }}
К сожалению, к моменту, когда это дойдет до моего помощника, клавиша arr
указывает на undefined
. Есть ли какой-либо допустимый синтаксис для получения массива внутри моего помощника без его определения в javascript?
Ответы
Ответ 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}}
Ответ 2
Вы можете использовать массив 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 '';
});
Ответ 3
Вы можете почти выполнить это с помощью eval()
, используя вспомогательный помощник:
Handlebars.registerHelper('printArray', function(values) {
var array = eval(values);
if (array.constructor === Array()) {
...
}
}
Вышеупомянутое позволяет вам вызвать это из шаблона:
{{printArray '[0, 1, 2]'}}
Одно из предостережений этого метода состоит в том, что вам нужно передать свой массив в виде строки.
Ответ 4
Вы пытались передать только скопированное значение массива?
{{printArray [1, 3, 4]}}
Я знаю, что вы можете легко передать объекты, в качестве аргументов для вспомогательных методов handlebars:
{{printArray {arr: [1, 3, 4]} }}
Взгляните на эти удивительные вспомогательные методы, большинство из которых я украл из других источников, некоторые из которых я написал или изменил... Они являются моей отправной точкой для ссылки на тему:
https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js
Ответ 5
Вы можете определить вспомогательный массив, как показано ниже.
Handlebars.registerHelper('array', function() {
return Array.prototype.slice.call(arguments, 0, -1);
}
{{printArray (array 1 3 4)}}