LiftでAjax
引き続きLiftの勉強中。Liftを含め最近のフレームワークだとAjaxなんてあまり意識せずに簡単に扱えるようになってるらしい。
"lift ajax"で検索すると色々ヒットするけど、とりあえず参考にしたのは以下の2つ。ま、Scalaを触っていてこの人達にブログにヒットしない事はないって位な有名なやつ。
コード自体の説明に関しては武田ソフトさんのエントリの方が詳しいかも。ゆろよろさんの方は、リクエストとレスポンスの中身も載せてあって参考になる。
■問題発生&解決方法
ただ、このコードそのままだとちょっと動かなかった。Firebugで見るとsyntax errorとかでてる。
Liftのバージョンが上がって、仕様が若干変わったっぽい。以下のようにしたら多分OK(ブログのサンプルをそのまま試してたわけではないので、以下のコードは試してないけど)。
"submit" -> <button onclick={SHtml.ajaxCall(ValById("whoField"), updateWho _)._2}> {?("Send")}</button>
ポイントは _2 というところ。以下、Liftの本に書いてあった説明の抜粋。
// ajaxCall and ajaxInvoke actually returns a pair (String, JsExp).
// The String is used for garbage collection, so we only need
// to use the JsExp element (_2).
ajaxCallの戻り値がPair[String, JsExp]になってるので、その2つめだけを使うって事らしい。