#jquery #javascript-events #vtl
#jquery #jquery-события #vtl
Вопрос:
<script>
var count_security = 0;
#set($count_security = 0)
function increment() {
count_security ;
#set($count_security = $count_security 1)
alert(count_security);
alert($count_security);
}
</script>
<html>
<input type="button" onclick="increment" />
</html>
Когда я вызываю вышеупомянутую функцию по нажатию кнопки, переменная « $count_security
» увеличивается только один раз. Дальнейшее увеличение не выполняется.
Пожалуйста, помогите, если я делаю что-то не так.
Ответ №1:
Это связано с тем, что вам нужно учитывать два контекста
- Контекст рендеринга (Velocity/VTL)
- Контекст выполнения (браузер / клиент)
Итак, когда это отобразится, у вас будет 1 выполнение в движке Velocity, который выполнит логику velocity, которая увеличивает $ count_security. Это будет отображено в виде буквального значения в выходных данных.
переменная count_security — это переменная КЛИЕНТА JavaScript, которая может быть изменена и обновлена клиентом.
Ваш код velocity #set() не будет отображен в выходных данных как «set». #set является функцией VTL и не изменяет выходной поток.
Я надеюсь, что это имеет смысл.
Комментарии:
1. или есть способ, которым я могу присвоить переменную javascript переменной velocity??
2. Как только страница отрисовывается в контексте velocity, все переменные, связанные с этим контекстом, «испаряются». Контекст, по сути, с точки зрения клиента, не существует. Если вы хотите поддерживать count_security по обе стороны баррикад, вам нужно будет реализовать что-то, чтобы поддерживать count_security в сеансе для пользователя, и использовать AJAX для выполнения обновления этой переменной в сеансе, чтобы синхронизировать ее с клиентом. Хотя это звучит сложно, выполнить это тривиально.