我想显示一个 HTML 复选框,然后是右侧的标签。
我按照Pere Villega 的建议,修改了 as 的 Play 2.1-SNAPSHOTviews.helper.checkbox.scala
版本views.helper.twitterCheckbox.scala
。我的项目使用Webjars提供的 Twitter Bootstrap 版本:
@**
* Generate an HTML input checkbox for Twitter Bootstrap.
*
* Example:
* {{{
* @checkbox(field = myForm("done"))
* }}}
*
* @param field The form field.
* @param args Set of extra HTML attributes ('''id''' and '''label''' are 2 special arguments).
* @param handler The field constructor.
*@
@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
@boxValue = @{ args.toMap.get('value).getOrElse("true") }
@input(field, args:_*) { (id, name, value, htmlArgs) =>
<label class="checkbox">
<input type="checkbox" name="@name" value="@boxValue" @(
if(value == Some(boxValue)) "checked" else "") @toHtmlArgs(htmlArgs.filterKeys(_ == 'value)) />
@args.toMap.get('_text)
</label>
}
我使用了这样的表单助手:
@import helper._
@form(action = courseName.map(routes.CoursesController.update(_)).getOrElse(routes.CoursesController.save()),
args = 'class -> "form-horizontal") {
<div class="span3">
<p><b>@{if (allCourses.size>0) "" else "No "}Prerequisite Courses</b></p>
<div class="control-group">
<div class="controls">
@allCourses.map { course =>
@twitterCheckbox(field = editCourseForm(course.name))
}
</div>
</div>
</div>
}
但是我得到这样的输出,这导致复选框与标签位于不同的行。输出已被格式化以提高可读性 - 请注意dl
和dd
标签:
<form action="/courses/admin" method="POST" class="form-horizontal">
<div class="span3">
<p><b>Prerequisite Courses</b></p>
<div class="control-group">
<div class="controls">
<dl class=" " id="skus_field">
<dt><label for="skus">skus</label></dt>
<dd>
<label class="checkbox">
<input type="checkbox" name="skus" value="true" />
</label>
</dd>
</dl>
</div>
</div>
</div>
</form>
似乎有某种我不知道的隐含行为。我怎样才能生成类似以下的内容,或者至少生成一些可以提供所需结果的输出?
<form action="/courses/admin" method="POST" class="form-horizontal">
<div class="span3">
<p><b>Prerequisite Courses</b></p>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input name="skues" type="checkbox" value="true"> sku1
</label>
</div>
</div>
</div>
</form>