【发布时间】:2016-12-17 03:00:01
【问题描述】:
如何在播放框架中隐藏文本字段?例如如何隐藏该字段:
@inputText(userProfileForm("name"), '_label -> "Name")
【问题讨论】:
标签: scala playframework
如何在播放框架中隐藏文本字段?例如如何隐藏该字段:
@inputText(userProfileForm("name"), '_label -> "Name")
【问题讨论】:
标签: scala playframework
这应该适用于所有浏览器:
@inputText(
userProfileForm("name"),
'_label -> "Name",
'style -> "display: none"
)
请注意,这只会隐藏字段,而不是标签等。
如果您还想隐藏标签,则无法使用默认助手执行此操作。 但是,您可以自己指定输入字段:
<input type="hidden" name="name" value="@userProfileForm.data.get("name")" />
name 应该是表单中字段的名称(在这种情况下,name 也是如此)。
我还没有测试过value,但它应该可以工作,也许你需要在name 周围去掉"。
如果您这样做,隐藏数据将与表单中的其他数据一起发送到服务器。
编辑:
如果隐藏的值是空的,这意味着你在调用视图时没有将它绑定到表单上。您可以在 Java 中将名称绑定到这样的形式(我不知道 Scala,但它已解释为 in the Play Scala documentation):
Map<String, String> data = new HashMap<>();
data.put("name","get the username here");
return ok(index.render(userProfileForm.bind(data));
另一个选择(在我看来更简洁)是简单地将用户名作为参数传递给视图。控制器变为:
return ok(index.render(userProfileForm, "username goes here"));
然后您可以在视图中简单地执行以下操作:
@(userProfileForm : Form[UserProfileForm])(name : String)
@helper.form(...){
<input type="hidden" name="name" value="@name" />
//...
}
【讨论】:
value="@userProfileForm.data.get("name")" 并且它可以工作。如果生成的 HTML 中的值为空,请检查我在答案中的编辑以了解可能导致它的原因。
inputText 帮助器采用 (Symbol, Any) 的可变参数,它表示 html 属性。如果您使用的是 html5,则只需添加 hidden 属性:
@inputText(userProfileForm("name"), '_label -> "Name", 'hidden -> "hidden")
通常hidden 属性没有任何值,但我找不到任何有关如何使用助手执行此操作的信息。至少在 Chrome 中它也是这样工作的。
编辑:
顺便说一句,你也可以只使用 html 代替 helper:
<input attribute=value hidden />
【讨论】:
我知道这是一个老问题,但我有一个类似的问题,我想隐藏一个 inputText 并仍然使用助手处理它。 最好和最干净的方法是编写自己的帮助程序,添加一个自定义值来告诉何时隐藏元素本身。 我找到了这样的解决方案
我自己的字段构造函数
@(elements: helper.FieldElements)
@if(elements.args.contains('hideIt)){
@elements.input
}else{
<div class="@if(elements.hasErrors) {error}">
<div class="input">
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>
}
我在视图文件中这样使用:
@inputText(form("fieldName"),
'hidden -> "true",
'hideIt -> true
)
现在你已经完成了:)
【讨论】:
虽然它有效,但我不喜欢 @Aerus 提供的 hashmap 版本,我更喜欢尽可能使用静态类型的表单,所以我想出了一个替代方案。
final UserProfileForm initial = new UserProfileForm("get the username here");
return ok(index.render(Form.form(UserProfileForm.class).fill(initial));
然后,在配置文件中,您可以执行以下操作:
<input type="hidden" name="name" value="@userProfileForm("name").value" />
【讨论】: