2.Snippetメソッドとして許される型

NodeSeq型とCssSel型のSnippetの違いを感じてください。

Snippetメソッドになりうる型は次の3タイプで、それ以外の型では「Method Not Found」エラーが発生します。

  val render : () => CssSel
  val render : () => NodeSeq
  val render : NodeSeq => NodeSeq

とりあえずは、ざっくりとそれぞれのコードの雰囲気を感じとってください。


NodeSeq型のHTML編集方法

NodeSeqとは、scala.xml.Node の集合、つまりXMLです。

NodeSeqの例:

<h1>{"あ"}</h1> ++ Text("説明テキスト")

<ul>{Product.findAll.map( p => <li>{p.title.is}</li> )}</ul>

NodeSeq型のSnippetでは、テンプレートに該当タグ<c:pagetitle />を打ち、サーバサイドでそのタグを指定して置き換えるという流れになります。

  BindHelper.bind( xhtml, "c",
    "pagetitle" -> "あ",
    "products" -> <ul>{Product.findAll.map( p =>
    <li>{p.title.is} {p.price.is}</li>
   )}</ul>
 )

最近のLiftでは、文字列はText型に暗黙変換されるようになりました。


CssSel型の編集方法

CssSel型とは、CSSセレクタと置き換えるXML(を定義した関数)の集合です。
次のように入れ子にも繰り返しにも対応しています。

  ".title" #> "あ" &
  ".products *" #> Product.findAll.map( p => {
    "name=title" #> p.title.is &
    "name=price" #> p.price.is
  } )

まるでjQueryのようなコーディングがサーバサイドでできます。

HTMLに適切なclass/name/idが設定されていれば、HTMLは全く触らなくても動的ページを生成できてしまいます。
これは本当に画期的で、この便利さに触れたら、Lift以外考えられなくなりますよ!(本当に)


他の特殊なSnippet

* LiftSession.processSnippet
* StatelessBehavior
* StatefulSnippet
* DispatchSnippet

あまり使う機会がないとは思いますが、追々説明するかもしれません。


このシリーズ

1.Lift再入門
2.Snippetメソッドとして許される型
3.ログインFORM - S.param使ったら負け
4.サーバーサイドバリデーションとサーバサイド関数
5.行列型の編集FORM
6.Radio、Checkboxが鬼門?
7.Ajax Form
8.javascriptからsubmitできない

動作確認サンプルコード github
Simply Lift(必読)


同じカテゴリのエントリ
1.Lift再入門 / 8.javascriptからsubmitできない / 7.Ajax Form / 6.Radio、Checkboxについて / 5.行列型の編集FORM / 4.サーバーサイドバリデーションとサーバサイド関数 / 3.ログインFORM - S.param使ったら負け / 2.Snippetメソッドとして許される型 / sbt0.12.xで依存jar抽出タスク / scala2.10+lift2.5+NetBeans7.2 / Scalaで入門関数プログラミング / reactive-webを試してみました / Lift2.2M1のテンプレート機能 / Scala Compiler Plugin / View Bound/Context Bound / ScalaZa01参加してきました / Akka Frameworkチュートリアルの次 / Akka Frameworkチュートリアルその2 / Akka Frameworkチュートリアル / LiftでJCaptcha / Url Rewrite Filter / sbt-android-plugin / Android SDK for Scala / 祝Lift2.0リリース / Liftの携帯対応まとめ / Scala2.8への移行 / Lift 2.0-scala280-SNAPSHOT/sbt0.7.1 / Scalaお絵かき環境 - Kojo / Lift+Quartzでバッチ / Scala&Liftを採用した理由 / Liftでdate_select系ヘルパーを作る / LiftでAjax / LiftのSubmitかしこい / lift-mapperのpaginateを使う / snippetをspecする / Lift Mapperを拡張する / LiftのDBをMySQLに / Liftプロジェクト環境を整える / Scala本読み比べてみました / NetBeans6.7&scala / じつはScalaはライトな言語 / Scalaバザ~ル / lift1.0所感 / specsを読む / implicit def / ScalaならNetBeansがサイコー / scala勉強会@東北がスタート / それでも俺はLiftをやるってのか / Scala&Liftセットアップ / ブログリニューアル /
コメント

コメントしてください

closed.