Pour ce travail, vous devriez opter pour javascriptRoutes
car il génère des chemins JS corrects basés sur votre routes.conf. Vous trouverez un exemple d'utilisation dans Zentask échantillon
Quoi qu'il en soit, pour l'instant, vous pouvez corriger votre appel AJAX en changeant l'attribut url
à
url : '@routes.Application.saveDefaultPhoneForUser()',
De cette façon, il faut placer tout le JS dans le modèle, ce qui est faux. Il peut ou même devrait être déplacé dans un fichier JS séparé et pour rendre cela possible, vous devez utiliser javascriptRoutes.
Plus...
javascriptRoutes ne sont pas décrites mais dans la documentation officielle, mais voici une introduction pas à pas. Bien que la description semble sophistiquée de facto L'utilisation de cette méthode présente de nombreux avantages.
1. Créez les routes communes
Vous devez d'abord créer des routes communes dans conf/routes
archivo:
GET /item/:id controllers.Application.getItem(id: Long)
POST /item/new controllers.Application.newItem
PUT /item/:id controllers.Application.updateItem(id: Long)
Bien sûr, vous devez créer au moins ces trois actions dans Application
contrôleur :
getItem(Long id){ ... }
newItem() { ... }
updateItem(Long id) { ... }
2. Créer une action traduisant les routes communes en JS
- placez-le quelque part, par exemple dans votre
Application
contrôleur
- Appelons-le
javascriptRoutes()
Dans cette action, vous pointerez le existant des itinéraires de la conf/routes
fichier
public static Result javascriptRoutes() {
response().setContentType("text/javascript");
return ok(
Routes.javascriptRouter("myJsRoutes",
routes.javascript.Application.getItem(),
routes.javascript.Application.newItem(),
routes.javascript.Application.updateItem(),
//inside somepackage
controllers.somepackage.routes.javascript.Application.updateItem()
)
);
}
Note : Ne mettez pas de paramètres entre parenthèses.
3. Créez un itinéraire pour javascriptRoutes
et l'inclure dans votre modèle
Route conf/routes
GET /javascriptRoutes controllers.Application.javascriptRoutes
Voir dans <head>
partie de /views/main.scala.html
<script type="text/javascript" src='@routes.Application.javascriptRoutes()'></script>
4. Utilisez javascriptRoutes où vous voulez
Jusqu'à présent, vous pouvez utiliser les routes en JS pour obtenir le chemin correct sans avoir besoin de spécifier l'adresse IP. url
y type
. Par exemple, au lieu de :
$('.getAjaxForThisContainer').click(function(e) {
var idToGet = $("#someField").val();
$.ajax({
type : 'GET',
url : '@routes.Application.getItem()',
data : {
id: idToGet
},
success : function(data) {
// ... some code on success
}
});
return false;
});
vous pouvez utiliser une version simplifiée ( myJsRoutes
du point 2) :
myJsRoutes.controllers.Application.getItem(idToGet).ajax({
success : function(data) { ... some code ... }
});
o
myJsRoutes.controllers.Application.newItem().ajax({
success : function(data) { ... some code ... }
});
etc...
- vous n'avez pas besoin de spécifier
type: "POST"
- Le routeur JS utilisera la méthode correcte selon conf/routes
règle
- vous pouvez définir
id
de l'enregistrement (ou d'autres paramètres) pour GET
ou PUT
(ou d'autres méthodes) en utilisant routes-like
syntaxe en JS pur
- Si votre règle de route contient tous les paramètres requis, vous pouvez vraiment minimiser votre JS :
pour la route :
GET /some/:a/:b/:c controllers.Application.getABC(a: String, b: Integer, c: String)
JS :
myJsRoutes.controllers.Application.getABC("a", 1, "b" ).ajax({});