1

私は本業のフロント エンダーですが、Twirl を含む Play フレームワークを活用する Scala プロジェクトに参加するよう依頼されました。渡された文字列に応じてわずかに異なる出力を表示するテンプレートを作成しようとしています。

これが私のコードです:

@(status: String)(implicit messages: Messages)

@{
    if(status == "00") {
        val pageTitle = "Page title"
        val appStatus = "className"
        val title = "message"
        val subTitle = "message"
        val step1Status = "className"
        val step2Status = "className"
        val step3Status = "className"
        val image1 = "/customs/assets/images/image.png"
        val image2 = "/customs/assets/images/image.png"
        val image3 = "/customs/assets/images/image.png"
        val optionalHeading = ""
        val optionalParagraph = ""
        val listContents = "<li>@Messages('message')</li><li>@Messages('message')</li>"
        val optionalLink = "<br /><a class='button' href='@routes.DashboardController.display(custom)' role='button'>@Messages('message')</a>"
    }

    if(status == "01") {
        //Other variables
    }
    if(status == "04") {
        //Etc...
    }
}

@layout(${pageTitle}) {
        <div class="content__body">
            <div class="hero">
                <div class="${appStatus}">
                    <h1 class="bold-large">@Messages(${title})</h1>
                    <p>
                        ${afterSubTitle}
                    </p>
                    <ol class="appstatus-steps">
                        <li><span class="${step1Status}"><img alt="Complete" title="Complete" src=" + ${image1} + ">@Messages("messages.Received")</span></li>
                        <li><span class="${step2Status}"><img alt="Complete" title="Complete" src=" + ${image2} + ">@Messages("messages.Processing")</span></li>
                        <li><span class="${step3Status}"><img alt="Complete" title="Complete" src=" + ${image3} + ">@Messages("messages.Decision")</span></li>
                    </ol>
                </div>
            </div>

            ${optionalHeading}
            ${optionalParagraph}

            <h2>@Messages("messages.next")</h2>

            <ul class="list list-bullet">
                ${listContents}
            </ul>

            ${optionalLink}
        </div>
    }

ご覧のとおり、このページはコード (ステータス) で呼び出され、その文字列に基づいて、ページの形成方法を変更するいくつかの変数が定義されます。content/css クラス/画像など

これは機能しません (知って驚くかもしれません!)

なぜそうならないのか、私には本当に不明です。${Variable} 形式を使用して変数にアクセスしていると思いましたが、代わりに @Variable 形式を使用することになっている可能性があります。

それらを @Variable の方法に変更しようとしても、まだ問題が発生しています。これは Scala/Twirl のスコープに関係しており、使用できる「定義」キーワードがあることを大まかに理解しています。いくつかのドキュメントを読みましたが、取得できません。

誰かがこれに光を当てることができますか?

編集

では、代わりに以下のコードを考えてみましょう。

@(status: String)(implicit messages: Messages)

@{
    if(status == "00") {
        val myClass = "custom-class-1"
    }
    if (status == "01") {
        val myClass = "custom-class-2"
    }
@layout("page title") {
    <div class="@myClass">This is a div</div>
}

したがって、「やりたいことはすべて」:) ステータスに基づいてさまざまな変数を定義し、それらの変数をページのテンプレートで使用できるようにすることです。

それは理にかなっていますか?私は Scala にとても慣れていないので、現時点ではタプル/定義がわかりませんが、学んでいます!

4

2 に答える 2