【问题标题】:How to conditionally disable a form input field如何有条件地禁用表单输入字段
【发布时间】:2013-01-28 06:37:28
【问题描述】:

假设我有一个域对象 Teacher,它有两个字段 String name、TeacherType TeacherType,其中 TeacherType 是一个包含 AssitantProfessor、AssociateProfessor、Professor 的枚举。

在我使用 grails run-target generate-all Teacher 生成视图后,它会生成一个 _form.gsp,用于创建和编辑 Teacher。在编辑视图中,我只希望名称是可编辑的,但 TeacherType 一旦创建就不可修改(这只是一个示例,要求某些字段在创建后不能更新)。在创建视图中,TeacherType 和 name 都应该是可编辑的。

由于 create.gsp 和 edit.gsp 都呈现 _form 模板,这里首选的方法是什么?

  1. 创建两个单独的模板,即 _formCreate.gsp 、 _formEdit.gsp;或者
  2. 在 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 并拆分表格可能会更好。

还有其他我不知道的方法吗?

【问题讨论】:

    标签: grails grails-2.0


    【解决方案1】:

    &lt;g:select&gt;disabled 属性(以及许多其他&lt;g:...&gt; 表单字段标签)可以是布尔值表达式:

    <g:select name="teacherType" from="${TeacherType?.values()}"
      keys="${TeacherType.values()*.name()}" required=""
      value="${teacherInstance?.teacherType?.name()}"
      disabled="${mode == 'edit'}"/>
    

    如果表达式计算结果为真,这将呈现为disabled="disabled",如果表达式为假,则呈现为缺少disabled 属性(即不会禁用该字段)。您甚至可以在模型中使用布尔条目,例如渲染模板

    model="[teacherInstance: teacherInstance, editing:true]"
    

    (或分别为editing:false)然后在&lt;g:select&gt; 上说disabled="${editing}"

    【讨论】:

    • 酷,我会试试这个。它确实看起来更好,因为它消除了条件 标签
    猜你喜欢
    • 2019-04-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2018-10-25
    • 2019-11-21
    • 2020-01-06
    相关资源
    最近更新 更多