如何在 Play! 框架中处理 @select

3

我正在尝试使用Play!的@select帮助程序在表单中填充一个组合框,但是经过很多搜索,我没有找到我需要的东西。

我想要这样的东西:

@select(
    filmeForm("Director"),
    options(Seq(aListOfDirectors))
)

这是一种电影注册形式,可以获得导演的外键。我需要列出导演的姓名,并在发送表单时获取所选导演的ID。 如果这种方式不可行,类似的替代方案也将很有用。有谁能帮帮我吗?提前致谢。

1
如果我理解正确的话,您想要获取绑定到表单的导演ID。您可以将序列设置为元组序列:Seq((directorID -> directorName)),并使用directorID填充select的value属性... - airudah
1个回答

7

HTML select 标签可以有一组类似以下的 option 标签:

<select id="directors-select" name="director">
    <option value="steven-spilberg">Steven Spilberg</option>
    <option value="stanley-kubric">Stanley Kubric</option>
</select>

因此,为了正确地填充selectoption,Play @select助手要求Seq包含一个元组(String, String),其中包含value属性和呈现给用户的"label"。换句话说,options参数需要是一个Seq[(String, String)]。以下是文档中提供的示例:
@select(
  field = myForm("mySelect"),
  options = Seq(
    "Foo" -> "foo text",
    "Bar" -> "bar text",
    "Baz" -> "baz text"
   ),
  '_default -> "Choose One",
  '_disabled -> Seq("FooKey", "BazKey")
  'cust_att_name -> "cust_att_value"
)

因此,您的 aListOfDirectors 需要包含一个 (String, String) 元组。但是解决这个问题其实很简单,只需要将代码更改为:
@select(
    field = filmeForm("Director"),
    options = aListOfDirectors.map(director => director.id.toString -> director.name)
)

在这里,我认为aListOfDirectors是一个Seq [Director]

文档在哪里?

Play的(Java)表单帮助文档指出,“在views.html.helper包中有几个输入帮助程序。”之后,我查看了play scaladocs,然后导航到views.html.helper 包。在那里,您可以找到@select的文档。 我知道当人们说“阅读文档”时,有时会听起来很严厉,但是考虑到框架/软件/库的开发人员(真正了解框架/软件/库)花费了他们的时间来解释如何使用框架/软件/库,我们肯定可以花一些时间阅读文档。

谢谢,它运行得很好。你在哪里找到这些信息,特别是如何使用那种方式填充选项?我在play的文档中没有找到这些信息。 - tomrlh
请查看我在答案末尾所做的修改。另外,请考虑将其标记为您问题的答案。 - marcospereira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接