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呼び出しを介してフォームの一部を再レンダリングする(他の)方法はありますか?