我有用于呈现评论的模板,comment.scala.html
:
@(date: String, text: String, name: String)
...
<h4>@name</h4>
<p>@date</p>
<div>@comment</div>
评论还添加了带有ajax的页面,sendcomment.js
:
$("#commentForm").submit(function () {
jsRoutes.controllers.Posts.addComment($("#blogpostContainer").data("post-id")).ajax({
success: function (data) {
//here i populate data with js - my current solution
var commentHtml = "<li><h4>" + data.name + ... +</li>"
//but i want use comment template for populating data
$("#commentsContainer").append(commentHtml);
$('#commentForm').each(function () {
this.reset();
});
},
error: function () {
alert("Error!")
},
data: $("#commentForm").serialize()
})
return false;
}
)
我知道,我不能将Scala变量(服务器端)与JS变量(客户端)混合在一起 我的问题 - 如何使用html模板渲染ajax回调?
答案 0 :(得分:2)
要扩展@ Ryan的答案,在Scala表单中重用comment.scala.html的唯一方法是返回HTML而不是JSON。
<强>赞成强>
<强>缺点强>
为此,您的控制器方法将看起来像这样的伪代码,不包括错误检查等。我假设是Java,但Scala版本的逻辑是一样的。
public static F.Promise<Result> addComment() {
return F.Promise.promise(() -> convert POST data to a comment object)
.map(comment -> comment.save())
.map(comment -> ok(comment.render(comment.date,
comment.text,
comment.userName)));
}
您的JavaScript看起来像
$("#commentForm").submit(function () {
jsRoutes.controllers.Posts.addComment($("#blogpostContainer").data("post-id")).ajax({
success: function (data) {
$("#commentsContainer").append(commentHtml);
$('#commentForm').each(function () {
this.reset();
});
},
error: function () {
alert("Error!")
},
data: $("#commentForm").serialize()
})
return false;
})
答案 1 :(得分:1)
就像变量一样,Scala模板也是渲染服务器端的。
你可以: