scala Play2.0生成隐藏字段而不使用div Package 器

uyto3xhc  于 2023-08-05  发布在  Scala
关注(0)|答案(5)|浏览(118)

我正在生成一个隐藏字段,如下所示:

@helper.input(_form("userID"), '_label-> None) { (id, name, value, args) =>
  <input type="hidden" name="@name" id="@id" value="@value" @toHtmlArgs(args)>
}

字符串
除了创建了div Package 器块元素之外,它工作得很好,这在表单中创建了视觉空白空间,看起来不太好-如何在没有div Package 器的情况下显示隐藏的输入元素?
我知道我可以在jQuery中隐藏父div Package 器,但我不想在一开始就生成它。

jvlzgdj9

jvlzgdj91#

在这种情况下,您不需要使用@helper.input。试试这个:

@defining(_form("userID")) { uidField =>
  <input type="hidden" name="@uidField.name" id="@uidField.id" value="@uidField.value">
}

字符串

5lhxktic

5lhxktic2#

虽然这个问题已经有了答案,但我还是想给予一个完整的例子,因为这对我有很大的帮助。
你可以在一个名为“app/views/helper/inputHidden.scala.html”的文件中定义你自己的隐藏输入助手,看起来像这样:

@**
* Generate a hidden HTML input.
*
* Example:
* {{{
*   @inputHidden(field = myForm("name"), args = 'data-ref -> 0)
* }}}
*
* @param field The form field.
* @param args Set of extra attributes.
* @param handler The field constructor.
*@
@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)

@id = @{ args.toMap.get('id).map(_.toString).getOrElse(field.id) }
@inputType = @{ args.toMap.get('type).map(_.toString).getOrElse("hidden") }
@htmlArgs = @{ args.filter(arg => !arg._1.name.startsWith("_") && arg._1 != 'id).toMap.filter(_._1 != 'type) }

<input type="@inputType" id="@id" name="@field.name" value="@field.value" @toHtmlArgs(htmlArgs)>

字符串
这允许您在所有视图中重用代码,并为隐藏字段给予data-ref="..."等附加参数。

wj8zmpe1

wj8zmpe13#

好的,也可以这样做:

<input type="hidden" name="foo" value="@{_form("foo").value.map(x=>x).getOrElse("")}">

字符串

tyg4sfes

tyg4sfes4#

在某些情况下,使用原始的html可以很好地工作,但不要忘记隐藏的输入可能需要验证(例如,如果它被填充了JavaScript以回复一些用户交互,就像一些日期选择器一样)。如果您在该字段上有验证错误,则提交将失败,但不会有任何可视队列来说明原因。
你可以编写额外的html来显示隐藏字段的错误,但如果error类不存在,我实际上会坚持使用@helper.input并使用css隐藏输入。你不需要JavaScript来做这件事。

igetnqfo

igetnqfo5#

Yo可以添加到视图中:

@inputHidden(field: Field) = {
    <input name="@(field.name)" type="hidden" value="@field.value">
}

字符串
或者你可以创建一个名为“app/views/helper/inputHidden.scala.html”的新文件。
在这两种情况下,它都是这样使用的:

@inputHidden(myForm("userID"))

相关问题