Thymeleaf,Javascript内联和迭代

使用Spring MVC和Thymeleaf,我正在构建一个带有一些javascript的html视图。

在页面内,th:每个都与迭代值一起使用,为一组按钮提供唯一的HTML id。

 

我的问题来自于尝试生成javascript,它将使用jQuery引用到每个按钮id。

在“另一种”视图分辨率语言中,我会使用代码:

 <% for(var i = 0; i  $('#optionBtn_').on("click", function() { doSomething(''); });  

(以上可能不是100%语法正确,但我希望你能得到这个想法 – 我正在尝试做的是使用上述风格)

但在Thymeleaf,虽然我明白我可以使用

 th:inline="javascript" 

为了引用单个模型项,我无法看到如何在脚本块中使用外观生成多个jQuery函数调用定义。

有任何想法吗? (我可能完全错误地解决了这个问题,所以我也对这方面的新想法持开放态度)

我会接受你对新想法的邀请,并把我接近类似案件的方法放在桌面上。
显然,问题主要在于后端和javascript数据之间的通信。 在这种情况下,javascript函数需要作为参数的数据。 由于html5引入了数据属性并且在后期版本中提高了jQuery的效率,因此您可以将您想要的任何后端数据公开为以“data-”开头的属性。 根据html5,这是有效的。 在jQuery中,您可以通过在减少初始“data-”pefix之后将html命名约定转换为camelCase来访问它们,就好像它们是jQuery数据一样。 (例如data-my-attribute = myAttribute)。 您可以在原始的html约定中访问它们(例如my-attribute)。 这是一个偏好的问题。

然后你的HTML可以更清洁:

    

您可以将事件处理程序绑定为:

 $("button.btn").on("click", function() { buttonPressed($(this).data("my-func-attr")) } 

或类似的。

这样你也可以保持你的代码更清晰,并与标记分开,这是Unobtrusive JS的一个原则

所以我做了一个解决方法。

因为页面中可以存在多个元素,所以我只需创建标记的外部循环并为每个按钮创建一个。 方法调用中的细节将具有与迭代中相同的索引/文本映射,以便首先创建按钮,尽管文本创建有点棘手:

  

一旦代码生成,它不是最小的,但它可以工作。