その質問に答えようとする前に。現在設定している動作を変更することをお勧めします。
なぜなら、URL フラグメントの目的はクライアント側だけだからです。このようなフラグメントはサーバーに送信されないため、反対のことを行うのは面倒です。
ただし、これは、従うことができる (かなり?) エレガントなソリューションの胚です。
私がやろうとしていることは、潜在的な動作を維持するために、ブラウザの取引をフラグメントに任せることです(IDに移動するか、履歴を処理することさえできます...)。
これを行うには、URL に含める必要があるフラグメントを定義するimplicit
パラメーターをテンプレートに追加できます。main
@(title: String)(content: Html)(urlFragment:Option[UrlFragment] = None)
ご覧のとおり、パラメーターを でラップし、Option
デフォルトに設定しましたNone
(AMAP 汚染を避けるため)。
また、単純に a をラップしString
ますが、単独で使用することもできますString
。専用の型を使用すると、セマンティックが強制されます。定義は次のとおりです。
case class UrlFragment(hash:String)
とてもシンプルです。
ここで、ブラウザに対処するように指示する方法を示します。要素の末尾head
と の先頭のbody
直前に、次を追加するだけです。
@urlFragment.map { f =>
<script>
$(function() {
//after everything is ready, so that other mechanism will be able to use the change hash event...
document.location.hash = "@Html(@f.hash)";
});
</script>
}
ご覧のとおり、 を使用してmap
(つまり が でurlFragment
はない場合None
)、 で利用可能なハッシュを設定するスクリプト ブロックを追加しますurlFragment
。
しかし、これは始まりかもしれません... シナリオ全体に対する別の解決策を考えてください。