我仍然在使用Play 2.0中的表单验证和表单助手。我有这个登录屏幕,我与Twitter Bootstrap一起使用。所以我的登录表单如下所示:
@helper.form(routes.Application.authenticate, 'class -> "form-horizontal") {
<fieldset>
<legend>@Messages("login")</legend>
@if(loginForm.hasGlobalErrors) {
<div class="alert alert-error">
<a class="close" data-dismiss="alert">×</a>
@loginForm.globalError.message
</div>
}
@if(flash.contains("success")) {
<div class="alert alert-success">
<a class="close" data-dismiss="alert">×</a>
@flash.get("success")
</div>
}
@inputText(loginForm("email"), '_label -> "Email")
@inputText(loginForm("password"), '_label -> Messages("login.password"))
<div class="form-actions">
<button type="submit" class="btn btn-success">@Messages("button.doLogin")</button>
@Messages("or")
<a class="btn btn-warning" href="routes.LandingPage.index">@Messages("button.doCancel")</a>
</div>
</fieldset>
}
我的twitter bootstrap字段如下所示:
@(elements: helper.FieldElements)
@**************************************************
* Generate input according twitter bootsrap rules *
**************************************************@
<div class="control-group @if(elements.hasErrors) {error}">
<label class="control-label" for="@elements.id">@elements.label</label>
<div class="controls">
@elements.input
<span class="help-inline">@elements.infos.mkString(", ")</span>
</div>
</div>
这是输出:
我不明白:
1,为什么帮助文本全部可见(在输入字段的右侧)
帮助文字来自@elements.infos.mkString(", ")
。因此,删除此行将删除帮助文本。或者,您可以传递一个空字符串来抑制可见的帮助文本:'_help -> ""
2,如果发生错误,如何仅显示帮助文本?
使用此代码时可以添加帮助文字:@elements.errors(elements.lang).mkString(", ")
3,传递给输入文本字段的可能参数是什么?我也希望传递类名,但我不知道如何......
我可以定义要传递的自定义参数(即类或占位符):class="@elements.args.get('_class)
然后我可以像这样传递它:'_class -> "classname"
4,我可以在一个模板部分中定义多个implicitFieldConstructors
吗?因为对于复选框我想要另一个fieldConstructor与imput box和textarea相比,但是如何做到这一点?
示例:在计算机数据库示例中定义了一个Twitter引导字段,但随后使用如下:
@inputText(loginForm("email"), '_label -> "Email")
为什么这里的名字是inputText而不仅仅是输入?因为还有一个input.scala.html?
所以,如果我想为复选框创建一个fieldhandler,如何使用它?以下格式给我错误:
@checkBoxHandler = @{ FieldConstructor(s2ftheme.constructors.checkbox.render) }
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor)
我收到错误消息:
not enough arguments for method apply: (implicit handler: views.html.helper.FieldConstructor, implicit lang: play.api.i18n.Lang)play.api.templates.Html in object checkbox. Unspecified value parameter lang.
我想我在这里错过了这个概念...... 感谢。
答案 0 :(得分:10)
信息文本来自@elements.infos.mkString(", ")
。要显示错误,您应该使用@elements.errors(elements.lang).mkString(", ")
代替。
更改信息内容的正确参数是 help (这有点不一致,你必须阅读源代码来实现这一点)所以如果你想使用内置的bootstrap字段但是压制信息,你会通过'_help -> ""
。
编辑代表#4:
以下是您应该如何调用特定复选框:
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor, implicitly[Lang])
是的,@input
表示有一个名为input.scala.html
的模板。它是所有输入助手的基本模板。
要了解其工作原理和方法,您应该深入了解Play 2.0和Scala(尤其是隐式参数)。
答案 1 :(得分:1)
<span class="help-inline">@elements.infos.mkString(", ")</span>
。您正在显示有关该字段的信息。删除它不显示信息。添加此代码:
@if(elements.hasErrors) {
<span class="help-inline">@elements.infos.mkString(", ")</span>
}
设置类名:将其添加到Twitter Bootstrap字段:class="@elements.args.get('_class)
。在您的登录表单中添加class参数,如下所示:@inputText(loginForm("email"), '_label -> "Email", '_class -> "classname")
要理解这个概念,请查看源代码:https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/defaultFieldConstructor.scala.html
答案 2 :(得分:0)
我在同一场战斗中展示错误:) 现在我用的是:
<span class="errors badge badge-important">@elements.errors.mkString(", ")</span>
如果没有错误,那将被隐藏,请看一下:http://twitter.github.com/bootstrap/components.html#labels-badges
但仍在寻找一种翻译方式&#34;必需&#34;葡萄牙语。