【问题标题】:Partial rendering on AJAX call in Play FrameworkPlay Framework 中 AJAX 调用的部分渲染
【发布时间】:2015-01-19 13:21:26
【问题描述】:

我在这里看到了一些类似的问题,但它们都没有真正帮助解决我的问题。

我在页面上有一个表格和一个需要在点击时重新呈现表格的按钮(使用不同的分页参数、排序等)。

我尝试了几种方法,并且成功地将值传递给具有嵌入式 js 路由器的控制器,但是由于这些值是通过 ajax 调用传递到后端的,因此我无法重新呈现表格。

我的嵌入式路由器如下所示:

@helper.javascriptRouter("jsRoutes")(
    routes.javascript.UserController.getUsers
)

我会从页面中调用它,例如: $.ajax(jsRoutes.controllers.UserController.getUsers(3, true, "login"));

现在,最后但同样重要的是,我想用 getUsers() 调用的结果重新渲染表格。

简单调用:

public Result getUsers(int size, boolean isAsc, String sortBy) {
    ......
    Logger.info("Returning " + size + " users");
    return Results.ok(usersPage.render(userDtos));
}

对我不起作用。

【问题讨论】:

    标签: java javascript playframework playframework-2.3 twirl


    【解决方案1】:

    有几种方法。

    最简单的方法是使用播放控制器以 HTML 格式呈现表格,然后使用 $('#mytable').load(...) 将其拉到您的页面上。

    更灵活的是有一个播放控制器,它返回JSON format中的数据,然后在浏览器中将其转换为HTML。这可以手动完成,使用客户端模板引擎(例如 http://handlebarsjs.com/)或使用完整的 javascript 框架(如 AngularJS 或 Ember.js)。

    【讨论】:

    • 感谢您的回复。你能更具体地说明第二种方法吗?返回 HTML 对我来说不是一个选项。至于模板,我宁愿坚持使用内置的 twirl 模板引擎,但这不是我主要关心的问题。您能否提供一个示例,说明当使用 ajax 调用操作时如何手动呈现 HTML 客户端?
    • 为什么不能返回 HTML ?实际上它只是 HTML 的一个片段(在你的情况下是一个表),这个片段更新了 DOM 的一个节点。您没有完整的页面刷新。 JSON 方法意味着在 JavaScript 中呈现 HTML,而 Twirl 则无法做到这一点。
    • 这里有两个客户端“手动”渲染的例子:jsfiddle.net/mjaric/sEwM6stackoverflow.com/questions/21184733/render-json-into-html 如果你的表很复杂,你真的应该使用模板引擎或完整的框架。
    • 我不想返回 HTML 片段,因为在我的情况下它可能非常大(表格有一个“更多”按钮,可以进一步向下扩展,所以我们可以谈论数百行)。此外,我不知道它是否会有所帮助,因为它对我尝试渲染的内容有什么影响?问题是即使发送到 render() 方法的数据已更新,也不会重新渲染任何内容。例如,所有这些东西在 JSF 中使用 region 很容易做到。我是 Play 新手,但我确信必须有一些简单的机制来进行部分重新渲染。这种要求如今无处不在。
    • JSF 是一所老派。您认为在部分渲染中会发生什么? ajax 调用发生在幕后,JSF 的客户端 js 替换了返回的 html。在游戏中,没有不必要的抽象来隐藏发生的本质。你用手来做。
    猜你喜欢
    • 2012-08-20
    • 2012-06-24
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多