如何在 java 中为车把创建自定义列表迭代器助手

How to create a custom list iterator helper for handlebars in java

我正在为 java 使用车把来自:https://github.com/jknack/handlebars.java 我有一个 CustomObject 列表和一个模板文件 template.hbs。我可以使用手柄条 {{#each customList}} 块来遍历此列表。

现在我只想遍历 customList 中的偶数索引对象。

服务器端:

handlebars.registerHelper("even", new Helper<List<?>>() {
        @Override
        public Object apply(List<?> list, Options options)
                throws IOException {
            if(list!=null && list.size()>1) {
                for(int index=0;index<list.size();index++) {
                    if((index+1) % 2 != 0) {
                        options.fn(list.remove(index));
                    }
                }
            }
            return list; 

Template.hbs的一部分:

{{#even customList}}
  {{customProperty1}}
{{/even}} 

但这不会迭代我的 customList,而是将我的列表打印为字符串。

我认为使用内置伪变量更容易,因此您可以完成您的要求,而无需使用自定义助手:

{{#customList}}
  {{#if @even}}
    {{customProperty1}}
  {{/if}}
{{/customList}}

注意它的内部索引从0开始(解释为偶数),如果你需要反转你可以使用#unless或@odd。

我还想指出 NumberHelper,它提供 isEven、isOdd 和条纹。

但是如果你真的坚持编写自己的自定义助手来迭代 Iterable 的偶数索引元素,你最好研究 EachHelper 的源代码,在那里你还会发现其他伪变量