Подтвердить что ты не робот

Пропустить массив, написанный в шаблоне, для помощника метеор/руля

У меня есть помощник printArray, который просто печатает каждый элемент в массиве. Он отлично работает, когда я определяю массив в JS и передаю его помощнику через объект контекста. То, что я хочу сделать, это определить массив прямо в шаблоне, например:

{{printArray arr=[1, 3, 4] }}

К сожалению, к моменту, когда это дойдет до моего помощника, клавиша arr указывает на undefined. Есть ли какой-либо допустимый синтаксис для получения массива внутри моего помощника без его определения в javascript?

4b9b3361

Ответ 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)}}