2014-06-30 103 views
3

我有一个表格映射如以下:播放框架如何重用和扩展形式的映射

val myBaseMapping = mapping(
    "email"    -> email, 
    "password"    -> text.verifying("Please provide a password", !_.isEmpty) 
)(BaseModel.apply)(BaseModel.unapply) 

这代表FormA。我有另一种形式,FormB,这是相同的,但增加了几个字段。这是它的映射会是什么样子:

val myExtendedMapping = mapping(
    "email"    -> email, 
    "password"    -> text.verifying("Please provide a password", !_.isEmpty) 
    "name"     -> text, 
    "website"    -> text 
)(ChildModel.apply)(ChildModel.unapply) 

ChildModel扩展BaseModel:它增加了2个新的领域,namewebsite

我试图以这样的方式编码myExtendedMapping,我不必为共享字段(电子邮件和密码)复制绑定定义。

我不知道什么是Scala语法。我不知道如何“扩展”给定的映射并添加绑定。另外,由于行为上的差异,我不想添加临时验证。这是可能的还是我只需要复制代码?

+0

每个绑定到什么? –

+0

我不确定这是否回答你的问题,但是要使用映射,我需要:Form(myMapping),然后使用它从HTTP请求进行绑定。 – oym

+0

我的意思是应该'FormB'还绑定到'MyModel',还是别的?如果是这样,那会是什么样子? –

回答

0

你可以做的是一个简单的作文。例如:

case class BaseModel(email: String, password: String) 
case class ChildModel(name: String, website: String, base: BaseModel) 

val commonMapping = mapping(
    "email" -> email, 
    "passwod" -> texttext.verifying("Please provide a password", !_.isEmpty) 
)(BaseModel.apply)(BaseModel.unapply) 

val myExtendedForm = Form[ChildModel](mapping(
    "name" -> text, 
    "website" -> text, 
    "base" -> commonMapping 
) 
    ((name, website, base) => ChildModel(name, website, base)) //bind 
    (child => Some(child.name, child.website, child.base))  //unbind 
)