Получить длину списка итераторов в руле Java
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?
Заранее спасибо!
2 ответа
Я думаю, что проблема в том, что size
метод в списке не getSize()
-- это просто size()
, И по умолчанию Handlebars Java "[использует] методы JavaBean (т.е. общедоступные методы getXxx и isXxx) и Map в качестве преобразователей значений", поэтому такие методы, как size()
не сработает
В основном вы хотите создать контекст, который включает в себя MethodValueResolver
, который обрабатывает любой публичный метод.
Context context = Context
.newBuilder(model)
.resolver(MethodValueResolver.INSTANCE)
.build();
Кроме того, пример с несколькими определителями.
Или, поскольку MethodValueResolver является своего рода излишним, возможно, на самом деле лучше просто явно уменьшить длину, как вы упоминаете в своем комментарии.
Вот решение 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>