Web アプリにフォームを投稿するとき、バックエンドでフォームを検証する前に、javascript でいくつかのチェックを実行します。js の検証は、I18 メッセージと画像に依存しています。これが scala テンプレートの場合、もちろん@Messagesと@routes.Assets.atを使用しますが、2 つ (scala テンプレートと .js ファイル) を混在させたくありません。
たとえば、現在イメージ ルートがハードコードされている js ファイルにこのチェックがあります。
$("form input[type=submit]").click(function (e) {
e.preventDefault();
var email = $("#username");
var emailPattern = /^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
if (email.val() == "") {
email.css("background-image", "url('/assets/images/general/input-row-red.jpg')");
return e.preventDefault();
} else {
email.css("background-image", "url(/images/general/inputTextBg.png)");
}
});
次のように、必要なメッセージを含む js ファイルを準備しようとしました。
.js ファイル:
/* Prepare messages*/
var messages = "";
$.getJSON("/messages/source", {
"keys": "sms.form.login.hide,sms.form.login"},
function (data) {
messages = data.messages;
});
MessageSource コントローラー:
object MessageSource extends Controller {
def getMessages(keys : String) = Action { request =>
if(keys.isEmpty) {
BadRequest(Json.obj("status" -> "KO", "message" -> "key plix!"))
}
else {
var js = Map.empty[String, String]
for (k <- keys.split(",")) {
js = js + (k -> Messages(k))
}
Ok(Json.obj("status" -> "OK", "messages" -> js))
}
}
}
しかし、これが最善の解決策だとは思いません。見てきたhttp://www.playframework.com/documentation/2.1.0/ScalaRouting
けどわからない。多分あなたは私のために何か良い解決策を持っていますか?