我想在 Play 2.0 中使用 ajax 调用重新渲染表单的一部分。
所以,我有一个表单,它调用 jQuery 加载来重新呈现该表单的子部分。表单模板包含我要重新呈现的子模板。所以,我已经在它自己的模板中拥有了表单的适当部分。出现困难是因为该模板通过重复包含在父级中。并且,该重复会自动将支持数据模型转换为 Play Field 对象。我似乎无法自己构建一个 Field,但我也应该尝试一下吗?鉴于缺乏这方面的信息,我显然必须在这里做一些根本错误的事情......
因此,顶级表单看起来像这样:
@(dataForm: Form[dataModel])
...
<div class="container">
...
@helper.form(action = routes.customerData.validate, args='class -> "form-horizontal") {
...
@repeat(dataForm("metaData")) { metaData =>
...
@metaDataDiv(metaData)
</div>
而且,div 子模板看起来像这样:
@(metaData: play.api.data.Field)
...
<div class="row-fluid" id='expandedView@metaData("metaId").value' style="display: none;">
...
</div>
而且,ajax 调用看起来像这样:
$('[id="' + metaDataContainerId + '"]').load(fetchMetaDataUrl, function(response, status, xhr) {
if (status == "error") {
showAjaxError(xhr.responseText);
}
});
最后,Controller 函数如下所示:
public static Result fetchMetaData(...)
{
...
MetaData metaData = ...;
play.api.data.Field field = new Field(null, ????, ...); ????
return ok(????.render(?????));
}
那么,这是否有任何模糊的正确性?我是否应该将我的子模板嵌入一个简单的表单并在生成的 html 上使用 JQuery 选择器?是否有某种(其他)方法可以通过 ajax 调用重新呈现表单的一部分?