Как поместить код 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
Надеюсь это поможет!