文件

§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( /*...*/ );

路由器也會提供幾個其他屬性,包括 urltype (HTTP 方法)。例如,對 jQuery 的 ajax 函式的上述呼叫也可以像這樣進行

var r = jsRoutes.controllers.Users.get(someId);
$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });

需要設定其他屬性(例如成功、錯誤、內容等)時,需要上述方法。

absoluteURLwebSocketURL 是方法(不是屬性),會傳回完整的 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 路由器方法的物件,並且應該預期路由器已將 typeurl 屬性設定為路由器請求的適當方法和網址。

若要定義此函式,請在您的動作中傳遞 ajaxMethod 方法參數,例如

JavaScriptReverseRouter.create(
    "jsRoutes",
    "myAjaxMethod",
    request.host(),
    routes.javascript.Users.list(),
    routes.javascript.Users.get())

下一步:嵌入式路由 DSL


在此文件檔中找到錯誤?此頁面的原始碼可以在 這裡 找到。在閱讀 文件檔指南 後,請隨時貢獻一個 pull request。有問題或建議要分享嗎?請前往 我們的社群論壇 與社群展開對話。