Webtech Walker

Backbone.js 0.9.9 の変更点

Backbone.js Advent Calendarの19日目です。

先週Backbone.jsの0.9.9がリリースされてけっこう変更点多いのでChange Logに書いてあるやつを簡単にまとめときます。

Backbone.js - Change Log

また、先日清水さん(@tori3_jp)が以下のようなエントリを書いていて、いくつか重複する点がありますので、こちらも参照してください。

Backbone.js 1.0に向けての変更点 « NAVER Engineers' Blog

Events関連

  • EventsにlistenTostopListeningが追加されました。清水さんのエントリの追記の部分に詳しく書いてあります。
  • BackboneオブジェクトがEventsを継承するようになりました。Backbone.on('foo')みたいなグローバルなイベントが貼れるみたいです。
  • jQueryのoneメソッドのように、一回だけイベントハンドラを実行するonceがEventsに追加されました。
  • jQueryのようにobj.on({click: action})みたいなイベントの指定ができるようになりました。

Model、Collection関連

  • collectionのaddメソッドのオプションで{merge: true}が指定されていた場合、既存のモデルを更新するようになりました。これも清水さんのエントリに詳しく書いてあります。
  • collectionにupdateメソッドが追加されました。詳しくはドキュメントを。
  • collectionのresetイベントハンドラの引数のoptionspreviousModelsというresetされる前のモデルのリストが渡されるようになりました。
  • バリデーションがsilentオプションがtrueのときも実行されるようになりました。また、それに伴ってisValidメソッドがなくなりました。
  • Collectionで使えるUnderscore.jsのメソッドにエイリアスのメソッド名も使えるようになりました。(collect, inject, foldl, foldr, head, tail, takeなど)
  • getByCidが削除され、getメソッドでidcidの両方を探すようになりました。
  • Collectionのsortメソッドが、resetイベントの代わりにsortイベントを発火するようになりました。
  • modelのisNewtrueのときに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のoptionseltagNameに関数を指定すると実行時に評価されるようになりました。

Sync関連

  • HTTPのPATCHメソッドをサポートするようになりました。saveメソッドのオプションで{patch: true}にするとPUTのところがPATCHになります。
    PATCHメソッドについては以下のエントリがわかりやすいです。
    PATCH メソッド、新しい HTTP Status Code - Yet Another Hackadelic
  • Backbone.syncrequestイベントが追加されました(実際にはModelやCollectionに対して発火します)。サーバーへのリクエストを開始したときに発火します。
  • emulateHTTPemulateJSONがメソッド呼び出し時のオプションとして指定できるようになりました。
  • 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でまたどれくらい変わるかがきになるところです。

このエントリーをはてなブックマークに追加