我正在使用Play Framework 2.2开发AngularJS项目。我应该为Web应用程序开发一个移动版本(没有响应,它是给定的uni项目的一部分)。对于桌面版本,我用以下内容加载索引页面:
def index(any: String) = Assets.at(path = "/public", file = "app/html/index.html")
工作正常。通过检查Scala Action
中的用户代理,检测移动浏览器也可以。
我更改了上面的代码,以获取请求标头:
def index(any: String) = Action { implicit request: RequestHeader =>
if(isMobile(request)) {
// result for mobile version
}
else //result for desktop version
}
但是,我不知道如何将不同的资产文件作为结果类型提供。
感谢任何帮助。
答案 0 :(得分:0)
如果我正确理解您的问题,您希望根据Assets.at()
测试提供来自isMobile
的不同文件,但无法确定如何让这些类型排成一行?< / p>
Assets.at()
会返回Action[AnyContent]
,这是Request[AnyContent]
到Future[Result]
最简单的函数。
知道这一点,我们只需要对你的index
函数进行一些调整,一切都适合:
def index(any: String) = Action.async { request: Request[AnyContent] =>
if(isMobile(request)) {
Assets.at(path = "/public", file = "mobile.html").apply(request)
} else {
Assets.at(path = "/public", file = "desktop.html")(request)
}
}
说明:
Future[Result]
,因此我们已成为Action.async
implicit
所以我放弃了它Action
需要Request
而不是RequestHeader
,所以我改变了.apply(request)
和(request)
- 它们完全相同