くれよん、 はじめました。
さすがに、主力言語がサーバーサイドJavaScriptになる中で、自分の手につくライブラリがないとつらい。かといってjQueryのお手軽さ、ActionViewのお手軽さを体感した身では、新しくJavaScriptフレームワークを探すのも微妙だなぁ、ということで、作り始めました。
ひとまず、jQuery.core のよく使う必要な部分をもってきて、さらにh()とかその辺を追加しまくる。しまくる、といっても必要になったらこっちに追加して全プロジェクト(CouchApp10個ぐらい抱えているので)でupdateをする、という方向で。
落書きするように気軽にCouchAppをかけたらいいなぁ、という意味でクレヨンってしてみました。
サーバーサイドでのArrayの判断。
jQuery.core のソースをみていて気がついたのですが、Object.toString.call(obj) == "[object Array]" するのが正しい判定方法のようです。ひさびさに以下動かしてみました。ドキュメントにあるArrayとJS内で作ったArrayの違い。
function(doc) { var a = [1,2,3]; emit("[doc.array, a] - 01. value", [doc.array, a]); emit("[doc.array, a] - 02. instanceof", [doc.array instanceof Array, a instanceof Array]); emit("[doc.array, a] - 03. constructor.name", [doc.array.constructor.name, a.constructor.name]); emit("[doc.array, a] - 04. typeof", [typeof(doc.array), typeof(a)]); emit("[doc.array, a] - 05. toString.call ", [toString.call(doc.array), toString.call(a)]);
結果はこうです
{"total_rows":5,"offset":0,"rows":[ {"id":"...","key":"[doc.array, a] - 01. value","value":[[1,2,3],[1,2,3]]}, {"id":"...","key":"[doc.array, a] - 02. instanceof","value":[false,true]}, {"id":"...","key":"[doc.array, a] - 03. constructor.name","value":["Array","Array"]}, {"id":"...","key":"[doc.array, a] - 04. typeof","value":["object","object"]}, {"id":"...","key":"[doc.array, a] - 05. toString.call ","value":["[object Array]","[object Array]"]} ]}
02. を見て分かるとおり、いまだにinstanceofが使えませんが。まぁtoString.callでいいのかな。