2

いくつかのヘルパー関数は過度に再利用されるため、別のファイルに配置したいと思います。Computer-Databseサンプルのリストファイルを取得しました。

https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html

app / viewsパッケージの下に「listing.scala.html」という新しいファイルを作成し、@link関数を元のファイルからそのファイルに移動しました。この新しいファイルは次のようになります。

@(currentSortBy: String, currentOrder: String, currentFilter: String)

@****************************************
* Helper generating navigation links    *
****************************************@
@link(newPage:Int, newSortBy:String) = @{

    var sortBy = currentSortBy
    var order = currentOrder

    if(newSortBy != null) {
        sortBy = newSortBy
        if(currentSortBy == newSortBy) {
            if(currentOrder == "asc") {
                order = "desc"
            } else {
                order = "asc"
            }
        } else {
            order = "asc"
        }
    }

    // Generate the link
    routes.Application.listPerfil(newPage, sortBy, order, currentFilter)

}

したがって、元のファイルで、@link呼び出しを次のように置き換えました。

<a href="@listing(currentSortBy, currentOrder, currentFilter).link(0, key)">@title</a>

そして問題は、コンパイルしようとすると次のエラーが発生することです。

value link is not a member of play.api.templates.Html

しかし、ドキュメント(http://www.playframework.org/documentation/2.0.4/ScalaTemplateUseCases)によると、問題はないようです。

何か推測?

4

1 に答える 1

1

Playのテンプレートは、高度な条件を設定するのに最適な場所ではありません。おそらく、必要なリンクのみを返すコントローラー(または他の方法)で処理することで、柔軟性が向上します。

すなわち:

 <a href="@controllers.Application.link(currentSortBy, currentOrder, currentFilter, 0, key)">@title</a>

あなたの場合、コントローラーの提案されたlink(...)機能はApplication逆ルートを返すこともできます。

他のテンプレートを含めることはHTMLのブロックを繰り返すための最良のオプションですが、指定された文字列を取得するのが難しい場合があることに注意してください(主にスペースがトリミングされていないため)。ご覧のとおり、ネストされた関数の呼び出しにも問題があります。Aほとんどの場合、タグ全体を生成できますが、listing.scala.htmlそれを使用するのは十分に快適ではありません(IMHO)。

于 2012-11-05T21:28:34.803 に答える