ここで、TeacherType は AssitantProfessor、AssitantProfessor、Professor を含む列挙型です。
grails run-target generate-all Teacher を使用してビューを生成すると、Teacher の作成と編集の両方に使用される _form.gsp が生成されます。編集ビューでは、名前のみを編集可能にしたいのですが、TeacherType は一度作成すると変更できなくなります (これは単なる例です。作成後に特定のフィールドを更新できないことが要件です)。作成ビューでは、TeacherType と名前の両方が編集可能である必要があります。
create.gsp と edit.gsp の両方が _form テンプレートをレンダリングするため、ここで推奨されるアプローチは何ですか?
- 2 つの個別のテンプレート、つまり _formCreate.gsp 、 _formEdit.gsp を作成します。または
- create.gsp と edit.gsp 内でモデル マップを渡し、それらを _form.gsp で使用してビューを条件付きでレンダリングしますか? 例えば
create.gsp で:
<fieldset class="form">
<g:render template="form" model="[teacherInstance: teacherInstance, 'mode':'create']"/>
</fieldset>
edit.gsp 内
<fieldset class="form">
<g:render template="form" model="[teacherInstance: teacherInstance, 'mode':'edit']"/>
</fieldset>
_form.gsp 内
<g:if test="${mode == 'edit'}">
<g:select name="teacherType" from="${TeacherType?.values()}" keys="${TeacherType.values()*.name()}" required="" value="${teacherInstance?.teacherType?.name()}" disabled="disabled"/>
</g:if>
<g:else>
<g:select name="teacherType" from="${TeacherType?.values()}" keys="${TeacherType.values()*.name()}" required="" value="${teacherInstance?.teacherType?.name()}" disabled="false"/>
</g:else>
アプローチ 2 は機能しますが、条件ステートメントの数が増える場合は、アプローチ 1 に従ってフォームを分割する方が良いかもしれません。
私が気付いていない別のアプローチはありますか?