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
parsefunctions 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 の変更点
