Thymeleaf / JavaScript参数

时间:2018-12-07 12:25:47

标签: javascript html thymeleaf

我已经使用SO已有一段时间了,并且找到了解决我大多数问题的方法,但是现在我对所找到的答案之一有疑问。
(原始帖子:Thymeleaf: clickable row

第二个答案为我的问题提供了强大的解决方案,但我真的很想了解它的工作方式和原因。

<tr th:each="item : ${itmes}" 
     th:onclick="'javascript:rowClicked(\'' + ${item.someField} + '\');'">
    ...
    <td>Some data</td>
    ...
</tr>

这里的\'''\'字符是什么?没有它们,为什么参数传递不起作用?我事先尝试了谷歌搜索,但没有发现任何特别有用的方法,但这可能是因为我没有提出正确的问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我发现报价过多。需要足够的引号,所以您最终会得到

th:onclick="'javascript:rowClicked('someString');"

实际上,您可以放下javascript:标签,而只需

th:onclick="'rowClicked(\'' + ${item.someField} + '\');"

这是假设我们在您的示例中看不到的一些引号。

我会亲自为item.somefield设置数据属性,并拥有

th:onclick="rowClicked(this);"

和rowClicked中有

function rowClicked(row) {
  var val = row.getAttribute("data-item");

答案 1 :(得分:0)

关键是要生成一个像这样的字符串:

rowClicked('somefield');

它是由三个与+运算符串联在一起的字符串构成的:

'rowClicked(\''

${item.someField}

'\');'

第一部分和最后一部分是用单引号'括起来的字符串,但是由于您需要在输出中使用单引号,因此添加了\'(代表转义的单引号),因此第一个字符串是rowClicked(',最后一个');。之后,所有内容都串联在一起:rowClicked('somefield');

我认为有些替代方案更易于阅读。例如,您可以改用literal substitution,它看起来像这样:

th:onclick="|rowClicked('${item.someField}');|"