我尝试在播放模板中传递数据Seq [],并根据Play Framework doc(http://www.playframework.com/documentation/2.2.x/ScalaJson),您可以将其转换为Json数组。我试过这个:
$(function() {
var jsArray = JSON.toJSON(customerList);
alert("Customer 1 : " + jsArray[0]);
for (var e in jsArray) {
setCustomers(e["name"], e["id"]);
}
});
但Chrome控制台显示错误消息:
Uncaught TypeError: Object #<Object> has no method 'toJSON'
我尝试导入play.api.libs.json._
,但它也不起作用。
任何人都可以帮助我吗?
答案 0 :(得分:0)
试试这个:
$(function() {
var jsArray = @Json.toJson(customerList);
alert("Customer 1 : " + jsArray[0]);
for (var e in jsArray) {
setCustomers(e["name"], e["id"]);
}
});
@将标记剩余的代码作为要执行的scala代码。没有@代码将被发送到浏览器并且浏览器不知道播放'scala json库
根据您的评论,customerList
的类型为Seq[Customer]
,因此您必须确保在模板范围内为Customer
设置反序列化程序。
假设您在Customer
包中定义了models
类并且您阅读了the documentation,那么您将拥有一个Customer
对象,其中隐含格式与{{1}一起定义}}。在这种情况下,您需要在模板顶部显示Customer
。
示例客户定义如下所示 包装模型
import models.Customer
如果您的case class Customer(name:String,...)
object Customer{
import play.api.libs.json._
implicit val customerFormats=Json.format[Customer]
}
类型依赖于其他自定义类型,您还需要导入或定义这些类型的Json序列化程序,例如:
Customer
根据您的评论,package models
case class CustomerAddress(street:String,postCode:String)
case class Customer(name:String,address:CustomerAddress,...)
object Customer{
import play.api.libs.json._
// need to define 2 json formats : 1 for CustomerAddress and 1 for Customer
implicit val customerAddressFormats=Json.format[CustomerAddress]
implicit val customerFormats=Json.format[Customer]
}
类在另一个可能不依赖于Play的项目中定义,在这种情况下,您仍然可以在另一个对象中定义自定义序列化程序
Customer
然后添加
package models
object IdentityAccessComponentFormats{
import play.api.libs.json._
implicit val customerAddressFormats=Json.format[CustomerAddress]
implicit val customerFormats=Json.format[Customer]
}
位于模板顶部