§JavaScript ルーティング
Playのルータは、クライアントサイドで実行されているJavaScriptからアプリケーションへのルーティングを処理するJavaScriptコードを生成できます。 JavaScriptルータは、アプリケーションのリファクタリングに役立ちます。 URLの構造またはパラメータ名を変更すると、JavaScriptは新しい構造を使用するように自動的に更新されます。
§JavaScriptルータの生成
PlayのJavaScriptルータを使用する最初のステップは、それを生成することです。 ルータは、明示的に宣言したルートのみを公開するため、JavaScriptコードのサイズが最小限に抑えられます。
JavaScriptルータを生成するには、2つの方法があります。 1つは、テンプレートディレクティブを使用してHTMLページにルータを埋め込む方法です。 もう1つは、ダウンロード、キャッシュ、およびページ間で共有できるアクションでJavaScriptリソースを生成する方法です.
§埋め込みルータ
埋め込みルータは、Scalaテンプレート内で`@javascriptRouter`ディレクティブを使用して生成できます。 これは通常、メインのデコレーティングテンプレート内で行われます。
@()(implicit req: play.api.mvc.RequestHeader)
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Users.list,
routes.javascript.Users.get
)
最初のパラメータは、ルータが配置されるグローバル変数の名前です。 2番目のパラメータは、このルータに含める必要がある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
)
**次:** カスタムバインディング
このドキュメントに誤りが見つかりましたか? このページのソースコードはこちらにあります。 ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。 質問やアドバイスがありますか? コミュニティフォーラムにアクセスして、コミュニティとの会話を開始してください。