0

假设我有一个视图,它接收到这样的列表:

@(notices: Seq[Notice])

@for( not <- notices) {
   <tr> not.title </tr>
}
....

我在控制器中有一个方法,它由 ajax 调用并更改列表的值。我知道 de 方法可以返回一个 Result 并使用新值重新呈现页面,例如:

public Result editNotice() {
   /*change the list */
   return ok(list.render(notices);
}

但我只想刷新列表所在的表。

如何在不重新加载整个页面的情况下刷新视图中的列表?

4

2 回答 2

1

只需创建较小的视图以仅呈现表格部分并在editNotice操作中使用它,然后在收到 AJAX 响应后用 JavaScript(可能是 jQuery)替换现有的

为确保您不需要在两个视图中创建相同的表格标记,请记住您可以使用另一个视图中的包含模板,如docs中所示。

因此您的 AJAX 操作将如下所示:

public Result editNotice() {
   return ok(table.render(notices);
}

和你的list.scala.html

@(notices: Seq[Notice])

@table(notices)
....

和你的table.scala.html

@(notices: Seq[Notice])

<table>
  @for(not <- notices) {
    <tr><td>@not.title</td></tr>
  }
</table>

其他解决方案

正在从 JS 返回 JsonNode - 对象数组 -editAction并使用 JS 构建新表。

于 2016-05-18T18:48:53.360 回答
0

最后我解决了这个从控制器返回结果的问题,但是用 javascript 和 div 替换了 html 中的内容。

控制器:

public Result editNotice() {
   return ok(table.render(notices);
}

html:list.scala.html

@()

<div id="table">
</div>
<li>
    <a class="ajax-call" href="#table" onclick="$('#table').load('/editNotice';"/>
</li>

html:table.scala.html

@(notices: Seq[Notice])
  <table>
     @for(not <- notices) {
       <tr><td>@not.title</td></tr>
     }
  </table>
于 2016-08-25T14:15:54.187 回答