2010-11-29 5 views
1

リフトに繰り返しタグ(ex:for、foreach)がありますか? 私はJSPで作業していたときに、リストを繰り返し処理することができました。JSPを使ってオブジェクトをタグに渡すだけでした。 this、またはlike thisのようなものです。 私はそれが本当に最良の例ではないことを知っていますが、あなたは私の意図を理解しています。 要約すると、これはLiftに存在するのでしょうか、そうでない場合、どうすればそのようなことをすることができますか?リフトウェイに反復タグがありますか?

最後にやりたいことは、ハードコードhtmlです。

答えて

10

要するに、Liftのデザインはロジックとデザインを厳密に分離しているため、テンプレートマークアップで一般化されたタグの使用を禁じています。

リフトでの反復処理の仕組みを確認するには、view first articleをご覧ください。

記事からの例:あなたのマークアップ:

<table> 
    <lift:show.users> 
    <tr> 
     <td><f:first_name>David</f:first_name></td> 
     <td><f:last_name>Pollak</f:last_name></td> 
    </tr> 
    </lift:show.users> 
</table> 

あなたのコード:今すぐ

class Show { 
    def users(xhtml: NodeSeq): NodeSeq = 
    Users.findAll.flatMap(user => 
     bind("f", xhtml, 
     "first_name" -> user.firstName, 
     "last_name" -> user.nameName 
    ) 
    ) 
} 

、それはタグ<lift:show.users>は、タグの内容と対応するメソッドを呼び出している見たときに何をするかリフト議論として。タグは、usersメソッドの戻り値に置き換えられます。

usersメソッドはすべてUsersの繰り返し処理を行い、各ユーザーはbindの最初の名前と2番目の名前の値をxhtmlにします。それらの反復はすべて連結され(flatMapを介して)返されます。

私が持ち上げを開始したとき、私はいつもこのアプローチがやや硬すぎると感じました。ここに小さなループがあり、どうやって傷つけることができますか?しかし今では、をテンプレートコードから独自のスニペットを作成するのがどれほど簡単か分かりました.JSPのようなものをもう使用することは想像できません。それは比較では弱く、マークアップを混乱させる。もちろん、Scalaの検証能力の大部分を失います。

注:

テンプレートタグは、コンテンツで満たされている理由は、目的を設計するためです。この場合、ダミーのタグと値はbindの間に置き換えられます。したがって、テンプレート設計者は、多かれ少なかれ意味のあるコンテンツをタグに埋め込むことができ、コーダが設計者が念頭に置いたセマンティクスをよりよく理解できるようになります。

+1

説明と簡単な返信をありがとう。 :) – ksemeks

+0

「David」と「Pollack」はなぜそこにありますか? –

+0

これはLift wikiからコピーされているためです。 – Debilski

関連する問題