Как поместить код thymeleaf во внешний файл javascript?

У меня есть внешний файл javascript, который объявлен в моем html файле со следующим тегом:

<script type="text/javascript" th:inline="javascript" th:src="@{/js/gp-aprobarDocumento.js}"></script>

и в gp-aprobarDocumento.js приведенный ниже код:

ventanaAprobacion = function(td) 
{
  /*<![CDATA[*/
    idEntregable = $(td).attr("data-row-id");
    idVersion = $(td).attr("data-row-version");
    alert("la siguiente viene con el texto dle properties");
    alert(/*[[${link.menu.page-certificacion-qa-bandeja-entrada}]]*/);
    $(function() {
        $("#dialog-aprobar-documento").dialog("open");
    });
  /*]]>*/
}

Таким образом, при выполнении функции предупреждение окна отображается пустым.

Кто-нибудь знает, как поместить выражение тимелеафа во внешний javascript?

Ответ 1

Я думаю, что вы хотите сделать это не возможно, у меня есть аналогичный вопрос (здесь: Как получить доступ к атрибуту модели с переменной javascript)

но в вашем случае вы можете сделать что-то вроде этого:

в html:

<script type="text/javascript" th:inline="javascript" >
    var alertVariable = ${link.menu.page-certificacion-qa-bandeja-entrada};
</script>

и в javascript:

ventanaAprobacion = function(td) 
{
    ...
    alert(alertVariable);
    ...
}

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

Ответ 2

Через DOM:

https://datatables.net/examples/data_sources/js_array.html

Если вы хотите создать переменную JS из объекта Thymeleaf, вы можете добавить указанный объект в DOM. Недавно я выполнил проект, в котором я возвращал результаты запроса в объект Java типа List & lt;> и добавил этот объект в DOM через Spring Controller.

  //Deliver Results Array to the DOM
  model.addAttribute("myResult", myResult);

После добавления этого объекта в модель шаблона Thymleaf вы можете получить к нему доступ в своем HTML как

  th:text="${myResult}"

Вы также можете ссылаться на него в своем Javascript, просто ссылаясь на имя объекта модели из DOM. Я не смог получить переменную для заполнения в отдельном файле JS, не сделав его глобальным по объему из файла HTML с помощью:

<script th:inline="javascript">
    var myResult = [[${myResult}]];
</script>

Мой файл JS выглядит следующим образом

  $(function(){

  //Get Thymeleaf DOM Object
  console.log(myResult);
  });

Возвращение результата из DOM

Этот объект должен быть ссылочным изнутри DOM. У вас может быть лучшая производительность с AJAX и созданием контроллера, который возвращает данные клиенту по HTTP. Похоже на то, что у thymeleaf 3 есть и другие решения: https://github.com/thymeleaf/thymeleaf/issues/395

Надеюсь это поможет!