『Backbone.jsを学び始める』の第3章Backbone ModelsとCollections(五)
2251 ワード
本編の内容は『Beginning Backbone.js』から翻訳され、原作者のJames Sugrue.転載は関連情報を明記してください.
本文の内容は前編ブログの内容に続く
モデル検証
本文の内容は前編ブログの内容に続く
モデル検証
Backboneは、外部のJavaScriptやフォームでコードを処理することなく、モデルの状態が正しいかどうかを判断するすべての論理をモデルに含めることができる検証メカニズムを提供します.
検証関数が提供すると、その関数は呼び出されるたびに呼び出される.saveメソッドは実行され、オプションパラメータとして{validate:true}が指定されたset/unset操作中にも検証関数が実行されます.
我々のBookモデルはname属性が存在しなければならないことを堅持し,year属性の値は2000年以降である必要があると仮定する.このルールの検証方法は、次のように記述できます.Book = Backbone.Model.extend({
initialize: function(){},
defaults: function(){},
printDetails: function(){},
validate: function(attrs){
if(attrs.year < 2000){
return 'Year must be after 2000';
}
if(!attrs.name){
return 'A name must be provided';
}
}
});
モデルの操作中にこれらのルールに違反した場合、プロパティ値を変更しようとする操作は失敗します.// year 2000
thisBook.set('year', 1999, {validate: true});
console.log('Check year change: ' + thisBook.get('year'));
// name
thisBook.unset('name', {validate: true});
console.log('Check if name was removed ' + thisBook.get('name'));
検証エラーが検出されると、イベントがトリガーされます.「invalid」イベントのリスニングを追加することで、検証に失敗したフィードバック情報を提供できます.すべてのイベントリスニングと同様に、これはinitialize関数に追加する必要があります.Book = Backbone.Model.extend({
initialize: function(){
this.on('invalid', function(model, error){
console.log('**Validation Error : ' + error + '**');
});
}
});
検証IDを設定しないとsetでプロパティを設定したときに検証関数は実行されません.しかし、いつでもisValid()メソッドでモデルが有効かどうかを確認することができます.//
console.log('Is model valid: ' + thisBook.isValid());
//
thisBook.set('year', 1998);
//
console.log('Is model valid: ' + thisBook.isValid());
Book = Backbone.Model.extend({
initialize: function(){},
defaults: function(){},
printDetails: function(){},
validate: function(attrs){
if(attrs.year < 2000){
return 'Year must be after 2000';
}
if(!attrs.name){
return 'A name must be provided';
}
}
});
// year 2000
thisBook.set('year', 1999, {validate: true});
console.log('Check year change: ' + thisBook.get('year'));
// name
thisBook.unset('name', {validate: true});
console.log('Check if name was removed ' + thisBook.get('name'));
Book = Backbone.Model.extend({
initialize: function(){
this.on('invalid', function(model, error){
console.log('**Validation Error : ' + error + '**');
});
}
});
//
console.log('Is model valid: ' + thisBook.isValid());
//
thisBook.set('year', 1998);
//
console.log('Is model valid: ' + thisBook.isValid());