我继承了一些使用Play的代码!框架中包含scala.html文件,其中包含javascript。玩!斯卡拉对我来说都是新手。
其中一个javascript函数会发布帖子并获取一个JSON对象。然后它循环遍历JSON对象并创建一个数组。
var myArray = [];
function createArray(){
$.post('/createArray', $('#arrayForm').serialize()).done(function( data ) {
var obj1 = JSON.parse(data);
$.each(obj1, function(idx, obj) {
myArray.push(obj.name);
});
});
return true;
}
然后使用此数组(字符串)创建一个文本输入字段,使用数组中的数据自动完成。
我希望/需要使用Play将此文本输入转换为选择下拉列表! @select但@select的选项arg想要一个List对象(或者Map或Seq - 因为我已经有了一个字符串数组,所以只是想象List会更容易。)
如果我手动创建List对象,它可以正常工作。
@select(pForm("equipName"), options(scala.collection.immutable.List("Yes","No")))
问题是我无法弄清楚如何将myArray数组转换为List对象,然后我可以将其传递给@select选项。
我发现很多帖子都谈到将scala列表转换为数组,但无法找到另一种方法。我希望这是一件容易的事,我似乎无法弄清楚。
提前感谢您的帮助。
答案 0 :(得分:1)
你做不到。更确切地说 - 你不想那样做。
所以基本上你的播放应用程序在服务器上运行。在您的Play应用程序中,编译所有这些.scala html文件以生成一些函数。
现在,当播放应用程序收到来自客户端浏览器的请求时,它会被路由器映射到某个控制器。控制器进行一些处理,最后采用上述功能之一(比如index.scala.html
得到views.html.index
)并使用一些参数调用此函数。
这些函数返回一些text
,然后将其作为HTTP响应发送到客户端的浏览器,响应头Content-Type:text/html; charset=utf-8
告诉浏览器将此文本视为html
。
现在,浏览器呈现嵌入了JavaScript的html
,从而运行JavaScript。所以...基本上你的JavaScrpt代码在服务器上不存在......对于play
而言,所有这些代码都只是文本。
这两个Scala code
和JavaScript code
都会在不同的时间,不同的计算机和不同的环境中执行,因此您无法做任何您说的话。