#java #javascript #templates #playframework
#java #javascript #шаблоны #playframework
Вопрос:
Я хочу получить доступ к элементам модели по индексу из JavaScript в шаблон Play Framework:
<script type="text/javascript" charset="utf-8">
window.onload = function()
{
var cl = ${colors.size()};
int i = 0;
for (i=0;i<cl;i )
{
labels = labels "${colors.name.get(i).escapeJavaScript().raw()}";
}
}
</script>
Моя проблема в том, что этот цикл генерирует исключение:
Исключение IndexOutOfBoundsException: индекс: 12, Размер: 4
Примечание 0: модель = Цвет.
Примечание 1: размер равен 4.
Примечание 2: если я тестирую с фиксированным числом вместо переменной i
, все в порядке, но это не то, что мне нужно.
Не могу понять, почему это не работает.
Комментарии:
1. Есть ли вероятность, что вы путаете Java и JavaScript? Вы используете оба
var
иint
, и предполагаете, что JavaScripti
доступен в Java.
Ответ №1:
Вы пытаетесь использовать Groovy внутри цикла Javascript, что неверно.
Помните, что ваш заводной код (внутри $ {} ) оценивается шаблоном воспроизведения на стороне сервера и результатом HTML-страницы, возвращаемой клиенту, а Javascript оценивается на стороне клиента (браузером, а не на вашем сервере).
может быть, вы хотите сделать что-то вроде :
<script type="text/javascript" charset="utf-8">
window.onload = function()
{
labels = [#{list colors.name}"${_.escapeJavaScript().raw()}"#{if !_isLast},#{/if}#{/list}];
}
что все еще опасно, если вы не понимаете, что он делает,
предпочитаю использовать простой AJAX-запрос и метод renderJSON для динамических загрузок.