Backbone.js 0.9.9 の変更点
Backbone.js Advent Calendarの19日目です。
先週Backbone.jsの0.9.9がリリースされてけっこう変更点多いのでChange Logに書いてあるやつを簡単にまとめときます。
また、先日清水さん(@tori3_jp)が以下のようなエントリを書いていて、いくつか重複する点がありますので、こちらも参照してください。
Backbone.js 1.0に向けての変更点 « NAVER Engineers' Blog
Events関連
- Eventsに
listenTo
とstopListening
が追加されました。清水さんのエントリの追記の部分に詳しく書いてあります。 Backbone
オブジェクトがEvents
を継承するようになりました。Backbone.on('foo')
みたいなグローバルなイベントが貼れるみたいです。- jQueryの
one
メソッドのように、一回だけイベントハンドラを実行するonce
がEventsに追加されました。 - jQueryのように
obj.on({click: action})
みたいなイベントの指定ができるようになりました。
Model、Collection関連
- collectionの
add
メソッドのオプションで{merge: true}
が指定されていた場合、既存のモデルを更新するようになりました。これも清水さんのエントリに詳しく書いてあります。 - collectionに
update
メソッドが追加されました。詳しくはドキュメントを。 - collectionの
reset
イベントハンドラの引数のoptions
にpreviousModels
というreset
される前のモデルのリストが渡されるようになりました。 - バリデーションが
silent
オプションがtrue
のときも実行されるようになりました。また、それに伴ってisValid
メソッドがなくなりました。 - Collectionで使えるUnderscore.jsのメソッドにエイリアスのメソッド名も使えるようになりました。(
collect
,inject
,foldl
,foldr
,head
,tail
,take
など) getByCid
が削除され、get
メソッドでid
とcid
の両方を探すようになりました。- Collectionの
sort
メソッドが、reset
イベントの代わりにsort
イベントを発火するようになりました。 - modelの
isNew
がtrue
のときにdestroy
を呼んだらfalse
を返すようになりました(って書いてあるけど実際は0.9.2からこの挙動です)。 - modelやcollectionでフェッチした後、定義した全ての
parse
メソッドが実行されるようになりました。(これについてはコードも読んだけど、どう変わったのかよくわからなかったので原文載せときます)
After fetching a model or a collection, all defined
parse
functions will now be run. So fetching a collection and getting back new models could cause both the collection to parse the list, and then each model to be parsed in turn, if you have both functions defined.
collectionでfetchしたときに新しいmodelがあったらそのmodelに対してもparse
が呼ばれるみたいな感じな気がするんだけど0.9.2のころからそうだったしなあという感じでよくわかりません。
View関連
- Viewの
options
、el
、tagName
に関数を指定すると実行時に評価されるようになりました。
Sync関連
- HTTPの
PATCH
メソッドをサポートするようになりました。save
メソッドのオプションで{patch: true}
にするとPUT
のところがPATCH
になります。
PATCH
メソッドについては以下のエントリがわかりやすいです。
PATCH メソッド、新しい HTTP Status Code - Yet Another Hackadelic Backbone.sync
にrequest
イベントが追加されました(実際にはModelやCollectionに対して発火します)。サーバーへのリクエストを開始したときに発火します。emulateHTTP
とemulateJSON
がメソッド呼び出し時のオプションとして指定できるようになりました。- Backbone.ajaxというフックが追加されました。この関数を上書きすることで
Backbone.sync
のAjax部分の動作を変更できます。デフォルトではBackbone.$.ajax
が使われます。
Router関連
Router
のURLにオプションを指定できるようになりました。docs/:section(/:subsection)
のような感じで()
の部分はあってもなくてもいいようなURLが指定できます。- ルーターの定義のところで、先頭と末尾のスラッシュの正規化のバグを修正しました。
その他
- DOM操作やAjaxの呼び出しを行うためのjQuery互換ライブラリの差し替えを行うのに
setDomLibrary
というメソッドが用意されていましたが、これが削除され、Backbone.$
を差し替えるようになりました。 Backbone.wrapError
が削除されました。(現時点でgh-pagesブランチには乗ってないけどmasterブランチのコミットにあったので掲載)
以上ですが、けっこう多いですね。1.0でまたどれくらい変わるかがきになるところです。
- Prev Entry:Backbone.Modelのattributesにオブジェクト入れるときの注意
- Next Entry:Backbone.js 0.9.10 の変更点