18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Backbone.jsAdvent Calendar 2011

Day 10

Backbone.jsでのサーバーサイドデータ→クライアントサイドデータ変換

Last updated at Posted at 2012-03-16

サーバーからJSONでデータを返すとき,以下のようにキーが設定してあることがあります.例えばTwitterの検索APIでは,検索結果のtweetはresultsというキーの値に入っています.

{ item: {foo: bar, ...} }

({foo: bar, ...}がアイテムの中身)
しかし,このデータからBackbone.Modelオブジェクトを作る時にnew Model(json.item)のように毎回中身を取り出すのは面倒です.

Backbone.Model#parse

Backbone.Modelではnewするときにまず引数をparseメソッドに渡し,その返り値を使ってモデルの属性値を設定します(parseはデフォルトでは何もしない).
そこでparseを適切に実装するとJSON→Backbone.Modelオブジェクトの変換がシンプルになります.

var MyItem = Backbone.Model.extend({
    parse: function(json) {
        return json.item;
    },
    // ...
});

var item = new MyItem(json);
// var item = new MyItem(json.item); と書く必要はない

他にもサーバーから返すデータの型が綺麗でないのをクライアント側では綺麗に扱ったり,複数バージョンAPI間のレスポンス形式の違いを隠蔽したり,というのもparseを実装することでできます.

var MyItem = Backbone.Model.extend({
    parse: function(json) {
        // 新旧APIのレスポンス形式の違いを吸収する
        return json.version == 1 ? obj.item : obj;
    },
    // ...
});

このようにサーバーから返すデータとクライアントで扱うデータの間に1層挟むと綺麗に書けてよいですね.

18
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?