博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Play-Scala开发技巧 - 带索引遍历Form(arrayProperty)
阅读量:6258 次
发布时间:2019-06-22

本文共 1331 字,大约阅读时间需要 4 分钟。

hot3.png

    Play提供了Form、Field等表单类型,帮助开发者节省了很多表单处理方面的负担,但是有些功能目前不是很灵活,正如本文即将讨论的@helper.repeat函数,该函数目前无法让开发者直接访问元素索引,本文介绍两种方法,可以临时解决这个问题。

    假设我们的form定义如下:

case class User(_id: String, name: String, emails: List[String])val userForm = Form[User](    mapping(      "_id" -> text,      "name" -> nonEmptyText,      "emails" -> list(nonEmptyText)    )(User.apply)(User.unapply))

其中emails属性是List类型。

1. Field中如何存放List类型?

List类型在Field中是被打散存放的,所以无法直接从Field中取出该List实例,例如对于:

user.emails = List("a@smartnlp.cn", "b@smartnlp.cn", "c@smartnlp.cn")

直接调用userForm("emails").value返回None,正确的访问方式是:

userForm("emails")("[0]").valueuserForm("emails")("[1]").valueuserForm("emails")("[2]").value

或者

userForm("emails[0]").valueuserForm("emails[1]").valueuserForm("emails[2]").value

OK,背景知识介绍完毕,下面进入正题。

2. 使用Filed.indexes获取索引信息

    对于存放List属性的Field实例,其indexes属性将会返回其索引列表,类型为List[Int],代码如下:

@for(i <- userForm("emails").indexes){     @userForm("emails")("[" + i + "]").value}

3. 利用Field.name获取索引信息

@helper.repeat(userForm("emails"), min=0 ){ field =>    @field.name}

输出信息为:

emails[0]emails[1]emails[2]

4. 利用Form.value获取绑定的数据对象

@for((email, i) <- userForm.value.get.emails.zipWithIndex){    @i - @email 
}

第1种方法可以配合@import helper._下的工具函数使用;第2钟方式不够灵活,需要手工从字符串中解析出索引; 第3种方法虽然简单,但是无法配合@import helper._下工具函数使用。

欢迎光临我们的小站:

奇智智能客服机平台:

转载于:https://my.oschina.net/joymufeng/blog/524344

你可能感兴趣的文章
Quick Cocos2dx MVC初步
查看>>
解决VS Code使用code runner开发Python乱码问题
查看>>
try-catch-finally块的运行机制
查看>>
1.6.2 保存到文件
查看>>
iOS开发多线程篇—多线程简单介绍
查看>>
构建之法读后感
查看>>
awk命令
查看>>
WorldWind Java 版学习:5、贴地面渲染过程
查看>>
Sql Server系列:存储过程
查看>>
Pointer 指针
查看>>
使用sqlyog将sql server 迁移到mysql
查看>>
lost connection to mysql server reading initial communication packet
查看>>
Eucalyptus安装包的功能列表
查看>>
mongodbOperator
查看>>
从零开始学Java(一)基础概念——什么是"编程和软件开发"?
查看>>
Latency
查看>>
System.Collections 学习
查看>>
Python 安装pyautogui
查看>>
Keras AttributeError 'NoneType' object has no attribute '_inbound_nodes'
查看>>
Gabor滤波器学习
查看>>