フォームからドキュメントのバインディング。

寒くて途中で起きてしまったので、バインディングの続き

hidden_field とか radio_button とか check_box とかも追加したので、今度はフォームからドキュメントのマッピング。こちらは、jQueryプラグインとして serializeJson メソッドを使えるようにしました。

Rails の場合は、www-form-urlencoded の文字をサーバーでパースして、良きに計らえ、で数値とかbool値とかを型変換してくれるのですが、そうはいかないので、直接ユーザーが入力するtext_field, textarea 以外は、値がJSONフォーマットになるようにする。これで、JSON.parse()を組み合わせることで、value="1" は数値のフィールドとして解釈されますし、value=""1"" は文字列のフィールドとして解釈されるようになります。

ついでに、date_select とか作ったので、日付のフィールドはselectが3つ並ぶわけですが、3つの組をDate型で処理するようにもしました。

独立したライブラリにしようかな、と思ったんですが、まぁどうせjQuery使うので、jQueryプラグインとして、serializeJson() を実装

おかげで、showなどで

<form id="foo">
<%= hidden_field(doc, "_id") %>
<%= hidden_field(doc, "_rev") %>
<%= text_field(doc, "path-to-bind") %>
</form>

とフォームをActionView流儀で生成させつつ、クライアント側では、

db.saveDoc($("form#foo").serializeJson());

CouchDB流儀で簡単に記述できるようになりました。快適快適!

CSRF対策のためのauthtokenをどうしようかな、とか思ったりもしていますが、それはまたあとで。

Q. RJS っぽいのも作ったらいいんじゃない?
A. いや、どっちもJavaScriptだからいらんでしょ。ってかRJS流儀で書けるようにしてしまったらJSがどっちで動くのかますます混乱するじゃないか。

... しかし、これだと、CouchApp いらねーじゃん、というのはいいっこなしで。pushするためだけに使います。