如何将代码百万美元放在外部javascript文件中?

时间:2014-11-27 18:03:11

标签: javascript thymeleaf

我有一个外部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中吗?

4 个答案:

答案 0 :(得分:7)

我认为你想做的事情是不可能的,我有一个类似的问题(这里:How do you access a model attribute with javascript variable

但在你的情况下你可以做这样的事情:

in html:

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

并在javascript中使用以下内容:

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

我知道这不是你想要的,但我有同样的问题,我认为没有任何解决方案。

答案 1 :(得分:1)

通过DOM:

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

如果要从Thymeleaf对象创建JS变量,则可以将所述对象添加到DOM。我最近做了一个项目,将查询结果返回到类型为List <>的Java对象,并通过Spring Controller将该对象添加到DOM中。

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

将此对象添加到Thymleaf模板模型后,您可以通过

在HTML中对其进行访问
  th:text="${myResult}"

您也可以在Javascript中通过简单地从DOM引用模型对象的名称来引用它。我无法使用以下方法使变量在单独的JS文件中填充,而无法在HTML文件的全局范围内进行填充:

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

我的JS文件如下

  $(function(){

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

Returning Result from DOM

有问题的对象必须在DOM中是可引用的。使用AJAX并创建一个通过HTTP将数据返回给客户端的控制器,您可能会获得更好的性能。似乎百里香3也有其他解决方案:https://github.com/thymeleaf/thymeleaf/issues/395

希望这会有所帮助!

答案 2 :(得分:0)

这对我有用。在我的index.html中:

<script th:inline="javascript">
    /* variable used by index.js */
    var referenceId = [[${referenceId}]];
</script>
<script type="text/javascript" th:src="@{/js/index.js}">
</script>

然后在我的index.js中:

function doSomething() {        
    $.ajax({
        type: 'GET',
        url: '/api/' + referenceId ,
        contentType: 'application/json',
        beforeSend: beforeSend
    })
}

希望这会有所帮助。

答案 3 :(得分:0)

当然可以。

您不能将 Thymeleaf 模板代码放在外部 JavaScript 文件中,但您可以使用 HTML 中的模板片段将 JavaScript 代码放在 html 模板中的一对