1

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けどわからない。多分あなたは私のために何か良い解決策を持っていますか?

4

1 に答える 1