電子メールサブスクリプションの入力と送信を含むフッターテンプレートがあります。フッターはすべてのページで使用されます。サブスクリプションが成功すると、現在のページにリダイレクトされます。しかし、現在のページを示す文字列値を渡していることがわかりました。Play 2.0アプリケーション用のフッターテンプレートを作成するための最良の方法は何ですか?
footer.scala.html
@(page: String)
<div id="footer">
<div class="input-append">
<form action="@routes.ApplicationController.saveSubscription(page)"
method="post">
<input type="text" name="emailAddress" placeholder="Your Email" />
<input class="btn" type="submit" value="Subscribe" />
</form>
</div> <!-- /input-append -->
</div> <!-- /footer -->
ApplicationController.java
public class ApplicationController extends Controller {
public static Result saveSubscription(String page) {
..........
flash("success", "success message");
if (page.equals("page1")) {
return redirect(routes.ApplicationController.page1());
} else if (page.equals("page2")) {
return redirect(routes.ApplicationController.page2());
}
}
}
page1.scala.html
@main("Page 1") {
<div>
<p>page 1</p>
</div>
@footer("page1")
}
page2.scala.html
@main("Page 2") {
<div>
<p>page 2</p>
</div>
@footer("page2")
}
編集1
@virtualeyesをフォローしていますが、subscribe.jsが呼び出されていないようです。これが新しいセットアップです。
main.scala.html
<html>
<head>
<script type="text/javascript" src="@routes.Assets.at("javascripts/jquery.min.js")"></script>
<script type="text/javascript" src="@routes.Assets.at("javascripts/vendor/jquery.validate.min.js")"></script>
<script src="@routes.Assets.at("javascripts/main.js")" type="text/javascript"></script>
<script src="@routes.Assets.at("javascripts/subscribe.js")" type="text/javascript"></script>
</head>
<body>
@footer()
</body>
</html>
footer.scala.html
<div id="footer">
<div class="input-append">
<form id="_form" action="@routes.ApplicationController.simpleSubscription()">
<input type="text" name="emailAddress" placeholder="Your Email" />
<input id="_process" class="btn" type="submit" value="Subscribe" />
</form>
</div> <!-- /input-append -->
</div> <!-- /footer -->
ルート
POST /subscribe controllers.ApplicationController.simpleSubscription()
今、私は彼のエラーを受け取りました: アクションが見つかりませんリクエストに対して'GET /subscribe?emailAddress=fdsaf%40rte.com'
method="post"が削除されたためかどうかはわかりません。元に戻すと、結果は返されますが、/subscribeページにリダイレクトされます。subscribe.jsにもブレークポイントを設定しましたが、まったく呼び出されていないようです。
編集2-作業中
subscribe.coffeeに少し変更して、main.coffeeを削除した後、動作しています。
subscribe.coffee
$('#_process').click (e) ->
e.preventDefault()
isValid = $('#_form').validate().form()
if isValid
$('#_process').spin()
$.ajax
type: "POST"
url: $('#_form').attr('action')
data: $('#_form').serialize()
success: (data) ->
$('#_status > div').removeClass('alert-error').addClass('alert-success')
$('#_status > div').html( data )
$('#_status').fadeIn()
fade = () -> $('#_status').fadeOut('slow')
setTimeout fade, 2000
$('#_process').spin('stop')
error: (data) ->
$('#_status > div').removeClass('alert-success').addClass('alert-error')
$('#_status > div').html( data.responseText )
$('#_status').fadeIn()
fade = () -> $('#_status').fadeOut('slow')
setTimeout fade, 2000
$('#_process').spin('stop')
complete: () -> $('#_process').spin('stop')
footer.scala.html
<div id="_status">
<div class="alert alert-error"></div>
</div>
<div class="input-append">
<form id="_form" action="@routes.ApplicationController.simpleSubscription">
<input type="text" name="emailAddress" placeholder="Your Email" />
<input id="_process" class="btn" type="submit" value="Subscribe" />
</form>
<div id="_spin"></div>
</div> <!-- /input-append -->