Play 2.0嵌套表单:生成<input id =“email”/>而不是<input id =“user_email”/>

时间:2012-08-09 23:36:23

标签: scala playframework-2.0 nested-forms strip

Posted this播放用户组;我考虑了唯一的观点,所以希望得到一个观点,或者甚至是一个答案; - )

嵌套表单非常棒,但是有一个小故障可以将样板添加到javascript或scala模板中。

例如,给定:

@inputText(field = _form("user.email"),
    '_label-> "Email Address*",
    'class-> "required email",
    'placeholder-> "jdoe@gmail.com"
)

生成的输入字段类似于:

<input id="user_email" name="user.email" ...>

现在,当您想验证客户端的电子邮件地址时,您必须引用DOM ID:$('#user_email')

$('#email')更自然。

我知道我可以在模板中手动设置id attrib,但是默认情况下,它希望从id attrib中删除嵌套名称(在这种情况下是用户)。

查看github views helper directory,我找不到可以访问生成的id的位置(即我需要重载哪个文件以及如何)。

任何人都知道如何解决此问题和/或采取更好的方法?

1 个答案:

答案 0 :(得分:1)

以下是自动生成字段ID的位置:

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/data/Form.scala#L274

您实际上没有任何方法可以覆盖该行为,但您可以编写自己的@inputText帮助程序,在生成HTML时从ID中删除“user_”部分。

基本上复制粘贴default helper并替换

<input type="text" id="@id" ...

使用您自己的代码,例如

<input type="text" id="@processFieldId(id)" ...

或(未经测试!):

<input type="text" id="@(id.split('_').last)" ...

然后只需在模板中导入自定义帮助器,就像使用@inputText一样使用它。