5.行列型の編集FORM

商品一覧をエクセルみたいに更新したいっ、というご要望にお応えするSnippet。こんなの簡単です。

■テンプレート:
<form data-lift="lineEditor?form=post">
  <table>
    <tr class="products">
      <td><span class="id"/></td>
      <td><input type="text" class="title"/></td>
      <td><input type="text" class="price"/></td>
    </tr>
  </table>
  <input type="submit" value="更新" />
</form>

■Snippet:
class LineEditor {
  
  object changes extends RequestVar( new HashMap[Long,Product] )
  private def get(id:Long) =  changes.getOrElseUpdate(id, new Product(id,"",0))
  private def updateTitle(id:Long,title:String) =
    changes += id ->get(id).title(title)
  private def updatePrice(id:Long,priceString:String) =
    asInt(priceString).foreach( price =>
      changes += id -> get(id).price(price)
    )
  
  def render = {
    ".products *" #> Product.findAll.map( p => {
        ".id" #> p.id.toString &
        ".title" #> SHtml.text( p.title, updateTitle(p.id,_) ) &
        ".price" #> SHtml.text( p.price.toString, updatePrice(p.id,_) )
    } ) &
    "type=submit" #> {
      SHtml.submit("save", () => {
        changes.is.values.foreach( p => p.save )
        S.notice("更新しました")
        S.redirectTo("lineeditor")
      } ) ++
      SHtml.submit("reset all", () => Product.reset ) }
  }
}

前半は、リクエストスコープの格納領域に行データを出し入れするユーティリティ(もっと短く書ける気がする)。
後半のrenderメソッドでは、行列FORMの生成、複数のアクション( save と reset all )を含むコールバックの定義。

以上! すごく直感的で短くないですか?


このシリーズ

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.