2017-02-27 732 views
1

我正在生成一个使用thymeleaf的表格,它代表对象列表(小吃)。每份小吃都有许多与之相关的选票。我想对每个零食这样用户就可以选它的按钮,增加了其显示的计票结果,然后更新一次点击提交按钮在thymeleaf表中动态创建按钮

<table class="table table-striped"> 
    <thead> 
     <tr> 
     <th>Snacks</th> 
     <th>Last Date Purchased</th> 
     <th>Votes</th> 
     <th>Up Vote</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr th:each="snack,iterStat : ${snacksuggested}"> 
     <td th:text="${snack.name}"></td> 
     <td th:text="${snack.lastPurchaseDate}"></td> 
     <td th:text="${snack.votes}"></td> 
     <td> 
      <button class="btn btn-default" th:id="${'voteBtn_'+(iterStat.count -1)}" th:text="${snack.name} +' Vote'">Up Vote</button> 
     </td> 
     </tr> 
    </tbody> 
</table> 
  1. 我如何引用一个特定的小吃?
  2. 我在哪里放置javascript函数定义?
  3. 而我该如何更新按钮点击显示的投票计数?

PS。我正在使用弹簧

+0

您可以添加一个初始额外的单元格按行存储计数器。零食对象没有ID? – cralfaro

+0

让我解释我到目前为止对编辑问题所做的... –

回答

1

我没有在春季使用百里香。我在jsp页面上使用了jstl。所以,我从我的角度来解释你。首先,你应该为每一个你从javascript/jquery获得访问的元素提供id。

因此,要回答您的疑问:

  1. 我们会参考使用class vote_button小吃。同样的课程将适用于每一种小吃。

  2. 您可以将jquery/javascript函数放置在脚本标记内的代码末尾,以确保DOM在JQuery启动之前已加载。

  3. 您可以为包含id的每个按钮添加一个值。然后在每次点击时,您可以获得id并使用它来引用投票计数。

    <tr th:each="snack,iterStat : ${snacksuggested}"> 
        <td th:text="${snack.name}" id="snackname_${iterStat.count-1}"></td> 
        <td th:text="${snack.lastPurchaseDate} id="purchasedate_${iterStat.count-1}"></td> 
        <td th:text="${snack.votes} id="votes_${iterStat.count-1}"></td> 
        <td> 
         <button class="btn btn-default vote_button" value="${'voteBtn_'+(iterStat.count -1)}" th:id="${'voteBtn_'+(iterStat.count -1)}" th:text="${snack.name} +' Vote'">Up Vote</button> 
        </td> 
        </tr> 
    

到FO表的每一个元素分配ID后,现在是时候写一个jQuery/Javascript代码。我们将不得不使用一个班级来访问不同的投票按钮。

$(document).ready(function() { 
    $(".vote_button").on('click', function() { 
      var id = $(this).val(); 
      var idArray = id.split('_'); 
      var voteId= idArray[1]; 
      var currentVal = $("#votes_"+voteId).html(); 
      $("#votes_"+voteId).html(currentVal+1); 
    }); 
}); 

我遇到了类似的情况,你正面临着这是我如何解决它。我希望它能帮助你。

不建议动态绑定对象。我所做的是,我给每一行vote_button同一类,然后将这个类应用到每个动态创建的元素。每次单击votebutton时,我们都可以访问按钮的值或以vote_id(名称用下划线和id分隔)生成的按钮的ID。通过分割这个值,我们可以得到我们想要参考的行的id。我们可以通过这个id来访问任何行的值,因为每个<td>的名字是name_id(like votes_1,snackname_1),因为在每一行中,下划线之后的数字将是相同的并且它只是该行的位置。

+0

感谢您的回复,我喜欢您的答案背后的想法。但是......在阅读你的答案时,我意识到我还没有完全得到。 1.我正在考虑将您的脚本js课程放在最后的''是/否? 2。我如何使用动态标记的对象字段(即snackname_1,snackname_2)与数据绑定,可能使用地图? 3.你可以告诉我在前端开发中没有太多经验,你有任何教程建议吗? –

+0

@JustinD 1.您可以将js代码放在HTML代码的最后。 2.不建议动态绑定对象。我做的是,我给每行'vote_button'提供了相同的类,然后将这个类应用到每个动态创建的元素。每次点击表决按钮时,我们都可以访问按钮的值或以'vote_id'生成的按钮的ID。通过分割这个值,我们可以得到我们想要引用的行的id。我们可以通过这个'id'访问任何行的值,因为每个'​​'的名字都是'name_id'。我也会在答案中加上这一点。 – Ayush