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);
    }
});

最後に、コントローラー関数は次のようになります。

public static Result fetchMetaData(...)
{
    ...

    MetaData metaData = ...;

    play.api.data.Field field = new Field(null, ????, ...);  ????

    return ok(????.render(?????));
}

それで、これは漠然と正しいですか?サブテンプレートを単純なフォームに埋め込み、結果の html で JQuery セレクターを使用するだけでよいでしょうか? ajax呼び出しを介してフォームの一部を再レンダリングする(他の)方法はありますか?

4

0 に答える 0