22

我有一个名为的助手printArray,它只打印数组中的每个项目。当我在 JS 中定义数组并通过上下文对象将其传递给助手时,它的效果很好。我想要做的是在模板中定义数组,例如:

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

不幸的是,当这到达我的助手时,arr关键点是undefined. 是否有任何有效的语法可以在我的助手中获取数组而不在 javascript 中定义它?

4

7 回答 7

8

你可以使用 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 '';
});
于 2014-12-16T03:21:29.410 回答
3

您几乎可以使用 来完成此操作eval(),使用如下帮助器:

Handlebars.registerHelper('printArray', function(values) {
   var array = eval(values);

   if (array.constructor === Array()) {
     ...
   }
}

以上允许您从模板中调用它:

{{printArray '[0, 1, 2]'}}

此方法的一个警告是您必须将数组作为字符串传递。

于 2015-09-21T16:40:07.887 回答
2

您需要使用另一个返回数组的助手

Template.ArrayDemo.helpers({
    arrayValues: [1, 2, 3],
    printArray: function(arr) {
        for (i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }
    }
 });

现在你可以做

{{printArray arr=arrayValues}}

于 2015-12-12T07:17:09.237 回答
1

您是否尝试过仅传入数组的括号值?

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

我知道您可以轻松地将对象作为参数传递给车把辅助方法:

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

看看这些很棒的辅助方法,其中大部分是我从其他地方偷来的,其中一些是我编写或调整的……它们是我关于该主题的参考起点:

https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js

于 2013-05-28T05:21:23.017 回答
1

您可以定义一个数组助手,如下所示。

Handlebars.registerHelper('array', function() {
    return Array.prototype.slice.call(arguments, 0, -1);
}

{{printArray (array 1 3 4)}}
于 2017-05-24T03:50:59.127 回答
1

帮手:

printArray: (...options) => {
        // remove unneeded properties
        options.pop();
        
        // return option array
        return options;
}

模板:

{{printArray "banana" "apple" "orange" "kiwi"}}

回报:

["banana", "apple", "orange", "kiwi"]

您可以将它与其他助手一起使用:

{{#each (printArray "banana" "apple" "orange" "kiwi")}}
         {{this}}
{{/each}}
于 2021-10-10T16:48:40.030 回答
0
{{printArray '1,3,4'}}

Handlebars.registerHelper("printArray", function(values){
    let array = values.split(",");
    console.log(array);
});
于 2021-08-02T19:20:26.153 回答