2011-10-27 13 views

答えて

21

play 2.0のテンプレートエンジンは、play 1.0 scalaモジュールから直接来ています。 Scalaのような関数型言語がどのようなメリットをもたらしているのか疑問に思っている人にとっては、確かに、これが輝く領域の1つです。

デモンストレーション:Scalaの構文で

タグは、関数呼び出しよりも何もありません。興味深いのは、htmlフラグメントが関数そのものとみなされ、最も強力な置換構文を可能にすることです。

のは、mytag.scala.htmlと呼ばれるHTMLページを定義してみましょう

ファイル:アプリケーション/ビュー/辞myTags/mytag.scala.html

タグは、上記の2つの異なる中で3つのパラメータを取り

@(level:String = "error", index: Int)(body: (String) => Html) 

@level match { 

    case "success" => { 
     <p class="success" index="@index"> 
      @body("green") 
     </p> 
    } 

    case "warning" => { 
     <p class="warning" index="@index"> 
      @body("orange") 
     </p> 
    } 

    case "error" => { 
     <p class="error" index="@index"> 
      @body("red") 
     </p> 
    }  
} 
パラメータ群:

  1. 文字列で表されるレベル(「エラー」にデフォルト)
  2. インデックス
  3. 最後に、bodyという関数は、文字列パラメータを受け取り、HTMLコードを返します。 bodyは独自のパラメータグループで定義されていることに注意してください。私たちがj2eeで知っているのはのjspフラグメントと同じです。

今の私たちは、このタグを使用することができる方法を見てみましょう:

@import views.mytags._ 

@mytag("error",2) { color => 
    Oops, something is <span style="color:@color">wrong</span> 
} 

我々は、タグ(または関数)を使用する前に、我々はそれがどこにあるプレイを知っている必要があります。それはの目的ですインポートステートメント。 Javaパッケージの場合と同様に、インポートファイルの場所を調整する限り、タグファイルの場所(パス)は関係ありません。

これは簡単なことですが、呼び出し自体に従います。ただし、パラメータ化されたhtmlフラグメントをタグに渡しています。詳細については

、あなたは2.0が最終的に独自のドキュメントが付属しています再生このURL

でScalaのテンプレートのドキュメントを見つけることができます。

4

完全に不要な答えですが、私のスカラを訓練するだけです。 これは機能しませんし、クリアな滞在中は短くなるでしょうか?

@(level:String = "error", index: Int)(body: (String) => Html) 

<p class="@level" index="@index"> 
    @body(
     @level match { 
     case "success" => "green" 
     case "warning" => "orange" 
     case "error" => "red" 
     } 
    ) 
</p> 
+0

私は正直なところ、スカラーの専門家ではありません。それで良い質問のように見える。 –

+0

もうすぐplay2.0をやり直すべきです。前回、私の実験では本当に本当に素朴でした!私はScalaのエキスパートではありませんが、私は多くを学びますが、それは今まで私が最後にJavaをオフにできるという印象を与える唯一の言語です) – mandubian

+0

この場合、レベルが成功以外のものであれば警告または間違っていると、そのcssクラスのapタグを持つことになります。 @Olivier Refaloの回答では、エラーレベルの1つに一致するPタグのみが出力されます。 – user3001

0

最初の例を使用すると、コンパイラエラーが発生します。 「ビュー」を削除します。インポートで問題を解決しました

@import mytagsを使用します。_

全例(http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):

Let’s write a simple views/tags/notice.scala.html 
tag that displays an HTML notice: 

@(level: String = "error")(body: (String) => Html) 

@level match { 

    case "success" => { 
    <p class="success"> 
     @body("green") 
    </p> 
    } 

    case "warning" => { 
    <p class="warning"> 
     @body("orange") 
    </p> 
    } 

    case "error" => { 
    <p class="error"> 
     @body("red") 
    </p> 
    } 

} 

そして今のは、別のテンプレートからそれを使ってみましょう:

の@import tags._
@notice( "エラー"){色=>おっと、何かが間違っています}

関連する問題