§Javascript 路由
Play 路由器能够生成 Javascript 代码,用于处理从运行在客户端的 Javascript 到您的应用程序的路由。Javascript 路由器有助于重构您的应用程序。如果您更改了 URL 结构或参数名称,您的 Javascript 会自动更新以使用新的结构。
§生成 Javascript 路由器
使用 Play 的 Javascript 路由器的第一步是生成它。路由器只会公开您明确声明的路由,从而最大限度地减少 Javascript 代码的大小。
有两种方法可以生成 Javascript 路由器。一种是使用模板指令将路由器嵌入 HTML 页面中。另一种是在可以下载、缓存并在页面之间共享的操作中生成 Javascript 资源。
§嵌入式路由器
可以使用 Scala 模板中的 @javascriptRouter
指令生成嵌入式路由器。这通常在主装饰模板中完成。
@()(implicit req: play.api.mvc.RequestHeader)
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Users.list,
routes.javascript.Users.get
)
第一个参数是路由器将放置在其中的全局变量的名称。第二个参数是要包含在此路由器中的 Javascript 路由列表。如上所示,要使用此函数,您的模板必须在作用域内具有隐式 RequestHeader
。
§路由器资源
可以通过创建一个调用路由生成器的操作来生成路由资源。它的语法与在模板中嵌入路由类似。
import javax.inject.Inject
import play.api.http.MimeTypes
import play.api.mvc._
import play.api.routing._
def javascriptRoutes: Action[AnyContent] = Action { implicit request =>
Ok(
JavaScriptReverseRouter("jsRoutes")(
routes.javascript.Users.list,
routes.javascript.Users.get
)
).as(MimeTypes.JAVASCRIPT)
}
然后,添加相应的路由。
GET /javascriptRoutes controllers.Application.javascriptRoutes
在实现此操作并将其添加到路由文件后,您就可以在模板中将其作为资源包含。
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
§使用路由器
以 jQuery 为例,进行调用非常简单:
$.ajax(jsRoutes.controllers.Users.get(someId))
.done( /*...*/ )
.fail( /*...*/ );
路由器还提供了一些其他属性,包括 url
和 type
(HTTP 方法)。例如,上面对 jQuery 的 ajax 函数的调用也可以像这样进行:
var r = jsRoutes.controllers.Users.get(someId);
$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });
在需要设置其他属性(如 success、error、context 等)的情况下,需要使用上述方法。
absoluteURL
和 webSocketURL
是方法(而不是属性),它们返回完整的 url 字符串。可以像这样建立 Websocket 连接:
var r = jsRoutes.controllers.Users.list();
var ws = new WebSocket(r.webSocketURL());
ws.onmessage = function(msg) {
/*...*/
};
§jQuery ajax 方法支持
注意:对 jQuery 的 ajax 函数的内置支持将在未来版本中移除。本节关于内置支持的内容仅供参考。请不要在新代码中使用路由器的 ajax 函数,并尽快考虑升级现有代码。上一节关于使用路由器的文档介绍了如何使用 jQuery。
如果您不喜欢 jQuery,或者您想以某种方式装饰 jQuery ajax 方法,您可以向路由器提供一个函数来执行 ajax 查询。此函数必须接受传递给 ajax
路由器方法的对象,并且应该期望路由器已将 type
和 url
属性设置为路由器请求的适当方法和 url。
要定义此函数,请在您的操作中传递 ajaxMethod
方法参数,例如:
JavaScriptReverseRouter("jsRoutes", Some("myAjaxFunction"))(
routes.javascript.Users.list,
routes.javascript.Users.get
)
下一步:自定义绑定
发现此文档中的错误?此页面的源代码可以在 此处 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?请访问 我们的社区论坛,与社区进行讨论。