Backbone.Collection を読んだ。ざっと眺めただけ。
http://documentcloud.github.com/backbone/docs/backbone.html
- toJSON が単に models それぞれの toJSON を map で呼んでるだけ、というのはきれい
- add のなかで for を使ってるけど _.each とかではダメなんだろうか、 remove も同様
- get と getByCid も同じロジックでよさそうなものなのに実装が違うのがなんか気になる
- sort は comparator がないと例外を投げるようだけどデフォルトではなにも設定されないんだろうか
- https://github.com/rails/rails/commit/a382d60f6abc94b6a965525872f858e48abc00de これみて pluck ってなんじゃらほいと思ってたけどまさかここで見るとは... (で未だにどういうニュアンスの単語なのかわからない)
- Backbone.Model もそうだったけど通信発生するあたりをぜんぶ (this.sync || Backbone.sync ).call とかに移譲しててよくできてるなーと思う
- reset と _reset とか、 API として公開するものと内部的なものとのポリシーがはっきりしている感じ、 API として公開するものは実装も自分自身や別クラス?の API を呼び出してるだけだったりして、実際に内部の値をいじるのは _hoge みたいなプライベートメソッドになるべく寄せる、みたいな
- Backbone.Collection のインスタンス?が直接 .each とかを呼べるように prototype に _.each とかを突っ込んでいて、 JavaScript ではこうやって MixIn するのかーと
Rails の resources ルーティングの URL を collection の base url に指定すると何もかもうまくいくように作ってあって、なるほどねーと思った。 Rails を知ってたらどういうもののフロントエンドを作るときに使えばいいのかすごくイメージしやすいし、関数の命名も ActiveRecord に似せてるから「Model がインスタンスで Collection がクラスなのねはいはい」ととっつきやすい。 Rails の連中が作ったんじゃないのこれという気がしてくる (documentcloud がサーバサイドに何を使ってるのかは知らない)