2

ルートによって異なる動作をするタグを作成しようとしていますが、@{ ... }ブロック内で html をレンダリングしようとすると、変数を正しく挿入できないようです。

@(route: String, on_image: String, off_image: String, alt_text: String)

@{
    val Pattern = ("(" + route + ".*)").r
    val path = request().path()


    path match {
        case Pattern(foo) => {
            if(path != route && route == "/") {
                <script type="text/javascript">
                    alert("{route}");
                </script>
            } else {
                <script type="text/javascript">
                    alert("{route}");
                </script>           
            }
        }
        case _ => {
            <script type="text/javascript">
                alert("{route}");
            </script>       
        }
    }
}

ページをロードすると、Firebug コンソールに構文エラーが表示され、script タグの内容が次のように評価されたことが明らかになりました。

alert(&quot;/accounts&quot;);

今、ブロック全体@Html{ ... }を and@Html( ... )と で囲んでみました。@Html({ ... })私もalert(@Html("{bar}"));他の同様のことを試しましたが、すべてがさまざまなエラーを引き起こします。

これを行う正しい方法は何ですか?

編集

簡単にするために 1 つの変数のみを使用しようとすること、およびその変数がどこから来たのかを示すように更新されました。

4

1 に答える 1

1

少し間接的に解決します。

@(route: String, on_image: String, off_image: String, alt_text: String)

@on = {
    <a href="@route"><img src="@routes.Assets.at(on_image)" alt="@alt_text" /></a>
}

@off = {
    <a href="@route"><img src="@routes.Assets.at(off_image)" alt="@alt_text" /></a>
}

@{
    val Pattern = ("(" + route + ".*)").r
    val path = request().path()


    path match {
        case Pattern(foo) => {
            if(path != route && route == "/") {
                {off}
            } else {
                {on}    
            }
        }
        case _ => {
            {off}       
        }
    }
}
于 2012-05-18T20:41:30.143 に答える