2

我想在 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 调用重新呈现表单的一部分?

4

0 回答 0