2012年12月18日火曜日

Backbone、Collection.createのエラーハンドラ


Backboneのドキュメントを見るとCollection.createについて

コレクションに新しいモデルのインスタンスを作成するときの便利メソッド。プロパティのハッシュを用いてモデルのインスタンスを作成し、モデルをサーバに保存して、これに成功した後コレクションにモデルを追加するのと等価。返却値はモデル、但しバリデーションエラー時はfalseが返却されモデルは作成されない。…

と書いて有ります。
これのバリデーションエラーのハンドラの登録の仕方についてです。
結論から言うと、イベントに対するハンドラの登録ではなく、
createメソッドのオプションでerrorハンドラを登録すべしです。

以下だらだらとその理由について、

通常Backboneにおいて、いわゆるハンドラはイベントの形で登録するのが一般的かと思います、
// collectionの`reset`イベントのハンドラにrenderListメソッドを登録
this.collection.on('reset', this.renderList, this);
Collection.createでModel.validateが`undefined`以外を返却した場合
(バリデーションエラーの場合)も以下のように
`error`イベントを捕まえられるかと思いますが
this.collection.on('error', this.alertError, this);
実際にCollection.createメソッドでModel.validateは`undefined`以外を返却しているが、
`error`イベントは発火されない、
答えはこのissueにありました。

Collection.createが失敗した時コレクションにはまだそのモデルは追加されていないのだから、
コレクションがまだ持っていないモデルのエラーを通知するのはおかしいということです。

DocumentCloudの人にそう言われると納得します、
なんでもかんでもイベントではなくて、`error`オプションの方が適切な文脈も
在るということですね。

0 件のコメント:

コメントを投稿