サーバーから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層挟むと綺麗に書けてよいですね.