Как определяются переменные при повторном вызове одного и того же шаблона Play? - PullRequest
0 голосов
/ 01 декабря 2011

Я пишу тег, который отслеживает, сколько раз он был вызван, чтобы генерировать уникальные идентификаторы для его элементов:

%{
    try {
      coolTagId++;
    } catch (Exception) {
      coolTagId = 0;
    }
}%
<div id='cool-tag-${coolTagId}'></div>

...

$('#cool-tag-${coolTagId}').click(function(){alert("Cool Tag ${coolTagId} clicked")});

Когда я включаю этот тег на страницу несколько раз, к моему удивлению, я вижу, что coolTagId равен 0 при каждой оценке. Почему это происходит?

(Тем временем я буду использовать какой-то UID, я просто хочу понять, почему вышеупомянутый фрагмент не работает)

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Я не знаю почему это так, но меня это не удивляет.Play - это структура без сохранения состояния, поэтому вполне естественно, что она не разделяет состояние между двумя экземплярами одинаковых тегов.

Интересно, что даже предварительная установка значения с помощью #{set coolTagId:0 /} не работает.

Что работает, тем не менее, это установка значения в вашем теге.Поместите это в конце вашего тега: #{set coolTagId:coolTagId /}.Таким образом, вы вручную помещаете значение в базовый шаблон.

1 голос
/ 01 декабря 2011

Это просто вопрос объема.

Представьте себе, что вы пишете это на чистом Java, тэг фактически вызывает метод. Все, что определено в вашем теге (т.е. метод), локально ограничено этим тегом, поэтому оно не будет существовать после выполнения тега, как если бы оно вышло из области видимости.

Причина этого в том, чтобы убедиться, что все, что находится за пределами вашего тега, не повреждено или не изменено при выполнении вашего тега. Все автономно, за исключением параметров, которые вы передаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...