0

Java代码——

List<String> table = Lists.newArrayList();
........

模板代码——

 {{#each table}}
    <td height="28" width="27"><h1> {{table.length}}</h1></td>
    <td height="28" width="27"><h1> {{table.size}}</h1></td>
    <td height="28" width="27"><h1> {{table.count}}</h1></td>
    <td height="28" width="27"><h1> {{../../table.length}}</h1></td>
    <td height="28" width="27"><h1> {{../table.length}}</h1></td>
 {{/each}}

我正在尝试获取车把模板中列表的长度。但是我尝试过的所有这些行都不起作用!我想知道我在哪里做错了。在车把java中获取迭代器长度的正确方法是什么?

提前致谢!

4

2 回答 2

2

我认为问题在于sizeList 上的方法不是getSize()- 它只是size(). 并且默认的Handlebars Java“[使用] JavaBean 方法(即公共 getXxx 和 isXxx 方法)和 Map 作为值解析器”,因此类似的方法size()不起作用。

基本上,您想构建一个包含 的上下文MethodValueResolver,它处理任何公共方法。

这里

Context context = Context
    .newBuilder(model)
    .resolver(MethodValueResolver.INSTANCE)
    .build();

此外,多值解析器示例


或者,由于 MethodValueResolver 有点矫枉过正,也许实际上最好只是明确地传递长度,正如您在评论中提到的那样。

于 2018-01-21T20:20:44.520 回答
1

这是一个 javascript/html 解决方案。您基本上必须抓住 {{#each}}...{{/each}} 之外的长度。

<!DOCTYPE html>
<html>
<head>
    <title>Page Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.js"></script>
</head>
<body>

<script id="t" type="text/x-handlebars">
    <p>My table length is {{table.length}}</p>
    {{#each table}}
    <p>Stay for some {{a}} and {{b}}</p>
    {{/each}}
</script>

<script>
    Handlebars.registerHelper('testHelper', function(ignore, opt) {
        var results = '';
        data.forEach(function (item) {
            results += opt.fn(item);
        });
        return results;
    });

    var table = [
        { a: 'tea', b: 'cookie' },
        { a: 'coffee', b: 'cake' }
    ];
    var t = Handlebars.compile($('#t').html());
    $('body').append(t({ table: table }));
</script>
</body>
</html>

于 2017-02-24T02:35:57.963 回答