§Javascript 路由器
Play 路由器能夠產生 Javascript 程式碼,用於處理從執行於客戶端端的 Javascript 回傳至應用程式的路由。Javascript 路由器有助於重構應用程式。如果您變更 URL 或參數名稱的結構,您的 Javascript 會自動更新為使用新的結構。
§產生 Javascript 路由器
使用 Play 的 Javascript 路由器的第一步是產生它。路由器只會公開您明確宣告的路由,因此可將 Javascript 程式碼的大小降至最低。
有兩種產生 Javascript 路由器的方法。一種是使用範本指令將路由器嵌入至 HTML 頁面。另一種是在動作中產生 Javascript 資源,這些資源可以下載、快取並在各頁面之間共用。
§嵌入式路由器
可以在 Twirl 範本中使用 @javascriptRouter
指令產生嵌入式路由器。這通常會在主要裝飾範本中進行。
@()(implicit request: play.mvc.Http.Request)
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Users.list,
routes.javascript.Users.get
)
第一個參數是路由器將置入其中的全域變數名稱。第二個參數是應包含在此路由器中的 JavaScript 路由清單。
§路由器資源
可以透過建立呼叫路由器產生器的動作來產生路由器資源。其語法與在範本中嵌入路由器類似
import play.mvc.Controller;
import play.mvc.Http;
import play.mvc.Result;
import play.routing.JavaScriptReverseRouter;
public Result javascriptRoutes(Http.Request request) {
return ok(JavaScriptReverseRouter.create(
"jsRoutes",
"jQuery.ajax",
request.host(),
routes.javascript.Users.list(),
routes.javascript.Users.get()))
.as(Http.MimeTypes.JAVASCRIPT);
}
接著,新增對應的路由
GET /javascriptRoutes controllers.Application.javascriptRoutes(request: Request)
在實作此動作並將其新增至路由檔案後,即可將其納入範本中的資源
<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: /*...*/ });
需要設定其他屬性(例如成功、錯誤、內容等)時,需要上述方法。
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
屬性設定為路由器請求的適當方法和網址。
若要定義此函式,請在您的動作中傳遞 ajaxMethod
方法參數,例如
JavaScriptReverseRouter.create(
"jsRoutes",
"myAjaxMethod",
request.host(),
routes.javascript.Users.list(),
routes.javascript.Users.get())
下一步:嵌入式路由 DSL
在此文件檔中找到錯誤?此頁面的原始碼可以在 這裡 找到。在閱讀 文件檔指南 後,請隨時貢獻一個 pull request。有問題或建議要分享嗎?請前往 我們的社群論壇 與社群展開對話。