Увеличение переменной VTL в функции JavaScript

#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 для выполнения обновления этой переменной в сеансе, чтобы синхронизировать ее с клиентом. Хотя это звучит сложно, выполнить это тривиально.